提问人:APTower 提问时间:10/26/2022 最后编辑:AnonymousAPTower 更新时间:11/2/2022 访问量:219
为什么从 LocalDateTime 到 Instant 的转换不起作用?
Why is conversion from LocalDateTime to Instant not working?
问:
你知道为什么吗 4.和 6.打印在以下代码中有错误的时间?
LocalDateTime ldtNow = LocalDateTime.now();
LocalDateTime ldtNextMonth = ldtNow.plusMonths(1);
System.out.println("1. " + ldtNow);
System.out.println("2. " + ldtNextMonth);
System.out.println("3. " + ldtNow.atZone(ZoneId.systemDefault()).toInstant().toString());
System.out.println("4. " + ldtNextMonth.atZone(ZoneId.systemDefault()).toInstant().toString());
System.out.println("5. " + ldtNow.atZone(ZoneOffset.systemDefault()).toInstant().toString());
System.out.println("6. " + ldtNextMonth.atZone(ZoneOffset.systemDefault()).toInstant().toString());
这是它打印的内容:
1. 2022-10-26T16:53:59.691891
2. 2022-11-26T16:53:59.691891
3. 2022-10-26T14:53:59.691891Z
4. 2022-11-26T15:53:59.691891Z //WRONG?
5. 2022-10-26T14:53:59.691891Z
6. 2022-11-26T15:53:59.691891Z //WRONG?
打印 3.& 4.使用 ZoneId 进行测试并打印 5。& 6.替换为 ZoneOffset。
3.& 4.(和 5. 和 6.)是 LocalDateTime#plusMonths 方法的用法。我应该怎么做才能在零时间获得正确的结果 (2022-11-26T14:53:59.691891Z)?
答:
1赞
c3R1cGFy
10/27/2022
#1
该方法返回 ZonedDatetime,然后体验夏令时效果。
全球不同地区在不同的日期实行夏令时。atZone()
所以你的印刷品是:
1. 2022-10-26T16:53:59.691891 // LocalDateTime
2. 2022-11-26T16:53:59.691891 // LocalDateTime
3. 2022-10-26T14:53:59.691891Z // ZonedDateTime
4. 2022-11-26T15:53:59.691891Z // ZonedDateTime
5. 2022-10-26T14:53:59.691891Z // ZonedDateTime
6. 2022-11-26T15:53:59.691891Z // ZonedDateTime
UTC
时区类似于任何其他时区的参考点。例如,时区具有 和 取决于一年中的时间段的区域偏移量。CET, central european time
UTC+2
UTC+1
您可以通过执行以下代码片段来查看此效果:
ZonedDateTime zdt1 = ldtNow.atZone(ZoneOffset.systemDefault());
ZonedDateTime zdt2 = ldtNextMonth.atZone(ZoneOffset.systemDefault());
System.out.println(ZoneOffset.from(zdt1)); // prints +02:00
System.out.println(ZoneOffset.from(zdt2)); // prints +01:00
评论
1赞
Anonymous
10/28/2022
更准确地说,中欧时间在几个欧洲和北非时区使用,其中大多数(不是全部)使用夏令时 (DST)。有些人全年都停留在 UTC+1 上。否则是一个正确的答案。
评论
ZoneId.of("UTC")
ZoneId.systemDefault()
ZoneId.of("UTC")
LocalDateTime
atZone()