【问题标题】:Proper way of converting a negative JOOQ YearToSecond object into milliseconds将负 JOOQ YearToSecond 对象转换为毫秒的正确方法
【发布时间】:2021-01-18 03:41:47
【问题描述】:

当从 Postgresql 数据库加载负数 Interval 并将其转换为毫秒时,它的符号被忽略,我得到一个正值。 我正在将YearToSecond 转换为doubleValue()

@Test
void testYearToSecondNegativeInterval()
{
  assertThat(YearToSecond.valueOf(2).doubleValue()).isEqualTo(2);
  assertThat(YearToSecond.valueOf(-2).doubleValue()).isEqualTo(-2);

  YearToSecond minus9802 = YearToSecond.valueOf("-0-0 +0 00:00:09.082000000");
  assertThat(minus9802.doubleValue()).isEqualTo(-9802);
}

此单元测试失败:

org.opentest4j.AssertionFailedError: 
Expecting:
 <9082.0>
to be equal to:
 <-9802.0>
but was not.

我从调试会话中获得了 String 表示 (-0-0 +0 00:00:09.082000000)。 查询相同的值时显示为-00:00:09.082intervalstyle = 'sql_standard'PT-9.082Sintervalstyle = 'iso_8601'

【问题讨论】:

    标签: java postgresql jooq


    【解决方案1】:

    一种可能的解决方法是以毫秒为单位直接获取值:

    create.select(DSL.extract(TABLE.COLUMN, DatePart.EPOCH)
                     .mul(1000)
                     .cast(Integer.class))
          .from(COLUMN)
    

    但这意味着额外的工作,因为与转换 YearToSecond 相比,必须获取额外的字段。

    【讨论】:

      猜你喜欢
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 2019-05-20
      相关资源
      最近更新 更多