小编Sia*_*Sia的帖子

如何在java 13或更高版本中格式化OffsetDateTime?

在 Java 11 中,时钟系统使用毫秒精度,但显然在 Java 13 及更高版本中,它使用微秒精度,这导致我的测试失败。例如,OffsetDateTime.now()当我从数据库“2021-12-10T10:58:05.309595+01:00”读取此日期时,给我这个日期“2021-12-10T10:58:05.309594500+01:00”。我正在寻找一种方法,可以以它们应该相等的方式格式化第一个日期。我确实希望将其设置为 OffsetDateTime 类型而不是字符串。

更新:我意识到这个问题是在我将java版本从11升级到17时出现的,而不是在本地,当gitlab运行测试时我遇到了这个问题。

这是测试:

@Test
    fun `can store, find and delete a failed-message`() {
        // given: a failed-message
        val failedMessage = FailedMessage(
            failedMessageId = FailedMessageId("the-subcription", "the-message-id"),
            messageAttributes = mapOf("one" to "een", "two" to "twee"),
            messagePayload = "message-payload",
            exception = "exception",
            dateTime = OffsetDateTime.now(),
            stackTrace = "stackey tracey"
        )
       
        failedMessageRepository.store(failedMessage)
      
        assertEquals(failedMessage, failedMessageRepository.find(failedMessage.failedMessageId))
}
Run Code Online (Sandbox Code Playgroud)

由于日期时间不相等,该测试失败。这是日志:

<FailedMessage(failedMessageId=the-subcription-the-message-id, messageAttributes={one=een, two=twee}, messagePayload=message-payload, exception=exception, dateTime=2021-12-10T10:58:05.309594500+01:00, stackTrace=stackey tracey)>
 but was: 
<FailedMessage(failedMessageId=the-subcription-the-message-id, messageAttributes={one=een, two=twee}, messagePayload=message-payload, exception=exception, dateTime=2021-12-10T10:58:05.309595+01:00, stackTrace=stackey tracey)> …
Run Code Online (Sandbox Code Playgroud)

java datetime java-11 offsetdatetime java-17

1
推荐指数
1
解决办法
4348
查看次数

标签 统计

datetime ×1

java ×1

java-11 ×1

java-17 ×1

offsetdatetime ×1