将负JOOQ YearToSecond对象转换为毫秒的正确方法



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

@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'

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

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

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