我们目前正在替换SimpleDateFormat
为DateTimeFormatter
. 在此期间,我遇到了一个奇怪的行为。以毫秒为单位的差异我无法向自己解释。这是代码:
val timeString = "2021-09-17T13:37:00.09Z"
val newFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").withZone(ZoneId.of("UTC"))
val oldFormatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.US)
val zonedDateTime = newFormatter.parse(timeString)
val newFormatterDate = Date.from(zonedDateTime.toInstant())
val oldFormatterDate = oldFormatter.parse(timeString)
Assert.assertEquals(newFormatterDate, oldFormatterDate) // false
// newFormatterDate.time is 1631885820090 and
// oldFormatterDate.time is 1631885820009
我在这里发现很多帖子说我们不应该再使用SimpleDateFormat
了。
但是有人可以向我解释这是怎么发生的吗?我们的代码中是否有错误或误解了什么?
编辑:@Ole VV 的链接提供的解决方案(如何在 java 中用两个或三个毫秒数字解析日期时间?)可能会解决我遇到的错误,但它不能回答问题/解释为什么这两个格式化程序会产生不同的结果。