【发布时间】:2025-11-26 18:55:02
【问题描述】:
我需要将字符串 2020-04-15T23:00:00+0000 转换为 ZonedDateTime。我尝试了以下方法,但它们没有用:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss Z");
System.out.println(ZonedDateTime.parse("2020-04-15T23:00:00+0000", formatter));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss 00:00");
System.out.println(ZonedDateTime.parse("2020-04-15T23:00:00+0000", formatter));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss 0000");
System.out.println(ZonedDateTime.parse("2020-04-15T23:00:00+0000", formatter));
我也使用了 ISO_LOCAL_DATE_TIME,但这不起作用。有什么想法吗?
更新:
我在下面尝试过:
OffsetDateTime dateTime1 = OffsetDateTime.parse("2020-04-15T23:00:00+0000",
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"));
System.out.println(dateTime1.toZonedDateTime());
我得到的输出为 2020-04-15T23:00Z,但我需要它作为 2020-04-15T23:00:00Z 的最后几秒,这是修剪。
【问题讨论】:
-
@Dwhitz 不。
-
您的模式在秒和时区之间有一个空格,而实际值在那里没有空格。如果您想以特定模式打印
ZonedDateTime,您应该使用具有该模式的格式化程序来格式化它(例如formatter.format(dateTime1)。ZonedDateTime本身没有模式(当您调用@时它使用默认格式) 987654327@) -
@MarkRotteveel 你能看看我在问题中的更新吗?我删除了空间,它确实有效,但它从最后剥离了几秒钟。
-
我评论的第二部分解决了这个问题。当您使用
System.out.println(..)时,它使用toString(),它始终使用相同的格式化程序来生成日期的字符串表示,并且在该格式化程序中,秒是可选的。如果您想使用不同的格式(例如,秒不是可选的格式),您需要明确使用格式化程序(例如System.out.println(formatter.format(dateTime1))。
标签: java datetime-format zoneddatetime