此字符串格式的正确格式化模式是什么?

What is the correct formatting pattern for this String format?

我在尝试将 String 转换为带有 threeten 的 ZonedDateTime 时收到 DateTimeParseException。我不确定这种字符串格式的正确格式化模式是什么? 2014-04-16T00:00+02:00[Europe/Berlin]。谁能告诉我正确的模式是怎样的?

在站点注释中:是否有某个页面或某个资源可以让我在无需自己重建的情况下查找此类内容?

谢谢!

不需要格式化程序:您的格式是 ZonedDateTime 的默认格式。 ZonedDateTime 都将此格式作为默认格式进行解析和打印,即没有任何显式格式化程序。

    String s = "2014-04-16T00:00+02:00[Europe/Berlin]";
    ZonedDateTime zdt = ZonedDateTime.parse(s);
    System.out.println("Parsed into " + zdt);

输出:

Parsed into 2014-04-16T00:00+02:00[Europe/Berlin]

该格式是从 ISO 8601 格式扩展而来的。 ISO 8601 仅为 2014-04-16T00:00+02:00,因此包括 UTC 偏移量但不包括时区。 java.time 的开发者将其扩展为包含时区 ID。

如果你想要一个格式化程序:如果你有一个特殊的原因需要一个格式化程序,也许你需要将一个传递给一个方法,或者你只是想明确指出哪个您期望的格式,其中一个是内置的:DateTimeFormatter.ISO_ZONED_DATE_TIME。所以你仍然不需要编写任何格式模式字符串。

在哪里可以找到这些信息? 它在 java.time 的 类 的文档中。请参阅下面的文档链接。

您自己的代码:感谢您在此答案下的评论中提供您自己的代码。对于其他读者,我在这里重复一遍,为了便于阅读而格式化。

fun parseZonedDateTimeToString(date: ZonedDateTime): String {
    return DateTimeFormatter.ISO_ZONED_DATE_TIME.format(date)
}

fun parseStringToZonedDateTime(dateString: String): ZonedDateTime {
     return ZonedDateTime.parse(dateString, DateTimeFormatter.ISO_ZONED_DATE_TIME)
} 

链接

  • Wikipedia article: ISO 8601
  • 文档链接:
    • 单参数 ZonedDateTime.parse() 指定“文本字符串,例如 2007-12-03T10:15:30+01:00[Europe/Paris]
    • ZonedDateTime.toString()承诺“一个String,比如2007-12-03T10:15:30+01:00[Europe/Paris]
    • DateTimeFormatter 带有内置格式化程序以及格式模式字符串中使用的模式字母
    • DateTimeFormatter.ISO_ZONED_DATE_TIME, “类似 ISO 的日期时间格式化程序,用于格式化或解析带有偏移量和区域的日期时间,例如 '2011-12-03T10:15:30+01:00[ Europe/Paris]'。”
    • 由于上面的链接指向 Java 10 个版本的文档 类,它并不总是与向后移植的文档相同,这里是 [=29] 的文档=], 在下面你也可以找到上述所有项目。