【发布时间】:2019-02-25 22:58:20
【问题描述】:
这是错误还是功能?
DateTimeFormatter JavaDoc 明确指出,当我在格式化程序中使用 OOOO 模式时,应使用本地化时区的完整形式(强调我的):
四个字母输出完整形式,即本地化的偏移文本,例如'GMT,带有2位小时和分钟字段,如果非零则可选第二个字段,冒号,例如'GMT+08:00'。
但如果时间是 GMT+0:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE yyyy.MM.dd HH:mm:ss.SSS OOOO");
String timestamp = OffsetDateTime.ofInstant(Instant.now(), ZoneOffset.UTC).format(formatter);
System.out.println(timestamp);
这是输出:
Mon 2019.02.25 22:30:00.586 GMT
预期:
Mon 2019.02.25 22:30:00.586 GMT+00:00
【问题讨论】:
-
它并不完全直接,但
Z说明符说“如果偏移量为零,输出将是相应的本地化偏移量文本”。如果这会导致GMT+0000,那将是奇怪的,因为那将只是具有非零偏移量的Z;换句话说,没有必要把它当作特例。 -
对 javadoc 的严格阅读表明,至少对我而言,
OOOO只能保证生成“完整的形式,即本地化的偏移文本”。给出的示例是“GMT,具有两位数的小时和分钟字段,可选的第二个字段(如果非零)和冒号”,但我不认为它是保证 完整的表格包括一个冒号或小时/分钟。可以说祖鲁时间没有偏移。 -
我在 Java 8、10 和 11 上进行了复制。观察到的行为也不符合我阅读文档的方式。如果偏移量不是 0,我会得到预期的值,例如
GMT+02:00。 -
@OleV.V.如果任何其他方法也包含相同的检查,则它可能是由于昏昏欲睡的复制粘贴导致的,因此是一个错误。无论如何,我想要我的 +00:00。
-
@VGR 它明确指出第二个字段是可选的,它不是小时和分钟,这将使它们成为非可选的 IMO。
标签: java datetime datetime-format timezone-offset java-time