此 String 格式的正确格式模式是什么?[复制]

What is the correct formatting pattern for this String format? [duplicate]

提问人:Benny 提问时间:4/4/2020 最后编辑:AnonymousBenny 更新时间:4/5/2020 访问量:188

问:

尝试将 String 转换为带有 threeten 的 ZonedDateTime 时,我收到 DateTimeParseException。我不确定此字符串格式的正确格式模式是什么? 2014-04-16T00:00+02:00[欧洲/柏林].有人能告诉我正确的模式是什么吗?

在站点上注释:是否有某些页面或资源可以在某个地方查找此类内容,而无需自己重建?

谢谢!

java 日期时间 格式 zoneddatetime threetenbp

评论

0赞 Rob 4/4/2020
在 SO 上不允许要求场外资源:我可以在这里询问哪些主题?
0赞 Benny 4/4/2020
完全偏离主题@Rob请修改我的问题并相应地回答我实际提出的问题,非常感谢
0赞 Benny 4/4/2020
我找到了我需要的东西,它是 SO 上这个主题的重复:stackoverflow.com/questions/36658034/......
0赞 Rob 4/4/2020
由于您确认它偏离主题且重复,因此您应该将其完全删除。
0赞 Rob 4/5/2020
您的第一条评论说“绝对偏离主题”。您的第二条评论指出“它是......”的副本。这使得它,用 SO 白话来说,“跑题了”。我只引用了你说的话。我们的问题有待删除。

答:

3赞 Anonymous 4/5/2020 #1

无需格式化程序:您的格式是 . 两者都解析并打印此格式作为其默认格式,即没有任何显式格式化程序。ZonedDateTimeZonedDateTime

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

输出:

解析为 2014-04-16T00:00+02:00[欧洲/柏林]

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

如果你想要一个格式化程序:如果你有一个特殊的原因想要一个格式化程序,也许你需要将一个传递给一个方法,或者你只是想明确它你期望的格式,一个是内置的:。因此,您仍然不需要编写任何格式模式字符串。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)
} 

链接

评论

0赞 Benny 4/5/2020
这是关于如何使用 ZonedDateTime 的宝贵信息,谢谢!对我来说特别有趣的是使用不同方法的不同文档链接。正如你所说,ThreeTen 向后移植略有不同。
0赞 Benny 4/5/2020
我使用以下两种方法将 ZonedDateTime 转换为 String,反之亦然: 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) } 这工作得很好,并没有真正偏离 java.time 类;)谢谢!