【发布时间】:2018-09-16 02:19:55
【问题描述】:
我有这个代码:
ZonedDateTime t1 = ZonedDateTime.parse("2018-04-06T10:01:00.000+03:00");
ZonedDateTime t2 = ZonedDateTime.parse("2018-04-06T10:01:00.000-03:00");
System.out.println(t1.compareTo(t2));
结果是-1。我猜它会将 t1 和 t2 都转换为相同的时区,然后进行比较。例如,在第一种情况下,它会(可能)比较
t1 = 2018-04-06T07:01:00.000+00:00 to t2 = 2018-04-06T13:01:00.000+00:00
这个case按我的预期返回1
ZonedDateTime t1 = ZonedDateTime.parse("2018-04-06T17:01:00.000+03:00");
ZonedDateTime t2 = ZonedDateTime.parse("2018-04-06T10:01:00.000-03:00");
System.out.println(t1.compareTo(t2));
但是这个 (*) 不返回 0,而是返回 1:
ZonedDateTime t1 = ZonedDateTime.parse("2018-04-06T16:01:00.000+03:00");
ZonedDateTime t2 = ZonedDateTime.parse("2018-04-06T10:01:00.000-03:00");
System.out.println(t1.compareTo(t2));
我什至尝试在解析字符串后使用truncatedTo(ChronoUnit.MINUTES) 来忽略秒部分,但没有任何改变。
最感兴趣的是如果我将 t1 / t2 减少/增加一秒,结果将是 -1
例如:
ZonedDateTime t1 = ZonedDateTime.parse("2018-04-06T16:01:00.000+03:00");
ZonedDateTime t2 = ZonedDateTime.parse("2018-04-06T10:01:01.000-03:00");
System.out.println(t1.compareTo(t2));
在我的用例中,所有用户输入时间都将以上述格式保存在许多 ZoneOffset 中,并且我有一些查询需要将其与服务器时间进行比较(忽略时间的秒数)。在上面的情况下(*),我怎样才能得到 t1 等于 t2?
【问题讨论】:
-
是的,我可能理解第一种情况。我不明白的情况是当我将
2018-04-06T16:01:00+03:00与2018-04-06T10:01:00-03:00进行比较时,它返回 1,在这种情况下它们是相等的。
标签: java zoneddatetime