加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么时区模式“OOOO”没有显示完整的GMT 00:00偏移格

发布时间:2020-12-15 01:10:00 所属栏目:Java 来源:网络整理
导读:这是一个错误还是一个功能? DateTimeFormatter JavaDoc明确指出当我在格式化程序中使用OOOO模式时,应使用完整形式的本地化时区(强调我的): Four letters outputs the full form,which is localized offset text,such as GMT, with 2-digit hour and minute

这是一个错误还是一个功能?

DateTimeFormatter JavaDoc明确指出当我在格式化程序中使用OOOO模式时,应使用完整形式的本地化时区(强调我的):

Four letters outputs the full form,which is localized offset text,such as ‘GMT,with 2-digit hour and minute field,optional second field if non-zero,and colon,for example ‘GMT+08:00’.

但如果时间是格林尼治标准时间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
最佳答案
一个bug?我们似乎同意观察到的行为与文档不一致(或者至少您必须对文档进行非常有创意的阅读以使其匹配).

一项功能?据我所知,观察到的行为在某些时候是有意识的决定. DateTimeFormatterBuilder中私有内部类LocalizedOffsetIdPrinterParser的源代码包含if(totalSecs!= 0){在打印小时,分钟和秒之前.它看起来不像复制粘贴错误,因为完全相同的代码行在文件中没有其他地方(偏移0在许多地方被特别处理,但我不知道其他地方完全被遗漏).

在Java 8格式模式OOOO上既不解析GMT也不解析GMT 00:00,这必须是一个bug.它已在Java 11中修复.在Java 11 OOOO上单独解析GMT就好了,所以他们必须认为这是可接受的(尽管它也解析GMT 00:00和GMT-00:00).

您可以考虑使用Oracle和/或OpenJDK提交错误(我不确定这些天的正确位置).他们是否会拒绝它,修复文档或修复代码 – 我不敢尝试猜测.

解决方法:’GMT’xxx

Anyway,I want my +00:00 somehow.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE yyyy.MM.dd HH:mm:ss.SSS 'GMT'xxx");

Wed 2019.02.27 08:46:43.226 GMT+00:00

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读