【发布时间】:2022-11-14 18:31:57
【问题描述】:
我有一个这样的 UTC 日期时间(字符串):2022-11-22T17:15:00
像这样的 ZoneID:"America/Tijuana"
使用 java.time API,我想获取该区域的实际日期时间,即:2022-11-22T09:15:00(时间是 09:15 而不是 17:15)
- ZonedDateTime.toLocalDateTime() 返回:
2022-11-22T17:15 - ZonedDateTime.toString() 返回:
2022-11-22T17:15-08:00[America/Tijuana]
以上都没有给我我正在寻找的东西。
这是我的代码:
ZoneId zonaID = ZoneId.of('America/Tijuana');
CharSequence dateUTC = "2022-11-22T17:15:00";
LocalDateTime dateTimeL = LocalDateTime.parse(dateUTC);
ZonedDateTime myZDT = ZonedDateTime.now();
ZonedDateTime myZDTFinal = myZDT.of(dateTimeL, zonaID);
System.out.println("using toLocalDateTime: " + myZDTFinal.toLocalDateTime());
System.out.println("using toString: " + myZDTFinal.toString());
我知道这可能是一个重复的问题,但是关于日期时间的问题太多了,我只是无法弄清楚这一点。
任何帮助将不胜感激。
【问题讨论】:
-
myZDT.of(dateTimeL, zonaID)正在调用一个静态方法,就好像它是一个实例方法一样。我会强烈避免这样做——这真的很令人困惑。 -
你已经得到的答案是正确的答案。您的主要问题是您假设字符串“2022-11-22T17:15:00”是 UTC,但在字符串本身中没有这样的指示。换句话说,它是一个 LocalDateTime。如果您知道它是 UTC,您首先需要从您拥有的 LocalDateTime 和 UTC ZoneId 创建 ZonedDateTime,然后将其转换为您的 zoneID“America/Tijuana”
标签: java datetime java-8 localdatetime