Java -如何将ZonedDateTime转换为LocalDateTime?

35g0bw71  于 2023-08-01  发布在  Java
关注(0)|答案(1)|浏览(92)

我想将本地日期和时间转换为UTC,然后返回到本地日期和时间,我在互联网上找不到解决方案,我使用了下面的代码:

// get local date and time
LocalDateTime localDateTime = LocalDateTime.now();
// print local date time
System.out.println(localDateTime);
// get system time zone / zone id
ZoneId zoneId = ZoneId.systemDefault();
// get UTC time with zone offset
ZonedDateTime zonedDateTime = LocalDateTime.now(ZoneOffset.UTC).atZone(zoneId);
System.out.println(zonedDateTime);
// now I want to convert the UTC with timezone back to local time, 
// but below code is not working  
System.out.println(zonedDateTime.toLocalDateTime());

字符串

预期结果

当地日期和时间= 2023-08- 01 T17:15:10.832796200
分区日期和时间= 2023-08- 01 T11:45:10.832796200+05:30[亚洲/加尔各答]
转换后的本地日期和时间= 2023-08- 01 T17:15:10.832796200

oug3syen

oug3syen1#

第一个月
这是可疑代码。这段代码说:
现在是什么时间 * 在UTC区域 *。所以,在阿姆斯特丹是15:46,但是如果我运行它(我们现在是夏令时,阿姆斯特丹有+2偏移),LocalDateTime.now(ZoneOffset.UTC)给我一个localDT对象,本地时间是13:46。它没有时区,因为…现在是当地约会时间。
然后你把那个时间(13:46)“放置”在一个区域中。假设zoneId是Europe/Amsterdam,这段代码可以得到2小时前发生的时间。这没有任何意义,你永远不会想写这段代码。
你大概想要的是:

LocalDateTime nowAtUtc = LocalDateTime.now(ZoneOffset.UTC);
ZonedDateTime zoned = nowAtUtc.atZone(ZoneOffset.UTC);
ZonedDateTime inAmsterdam = zoned.atZoneSameInstant(ZoneId.of("Europe/Amsterdam"));
System.out.println(inAmsterdam.toLocalDateTime());

字符串
上面的代码根据我在荷兰的时钟打印当前时间。
当然,那个 * 确切 * 的片段是没有意义的-为什么要从A转换到B,然后再转换回来呢?通常,如果你想要一个LDT,你只需使用LocalDateTime.now(),或者如果你想要一个ZDT,只需使用ZonedDateTime.now(zoneYouAreInterestedIn);。然而,我假设你问这个问题是因为你在这中间做了一堆你从问题中省略的事情。

相关问题