【发布时间】:2018-07-31 06:07:09
【问题描述】:
我被难住了。我必须承认我可能没有在正确的地方寻找这个错误。那就是……
我们使用dd MMM YYY HH:mm:ss z 作为日期格式字符串。小写的z 应该返回该区域的三个字母缩写,例如PST 或CET。它确实如此。无处不在,但生产。在生产中,我们得到偏移量,例如-08:00。我们通过 WAR 验证了我们在所有地方都在使用 joda 2.9.2。
我们使用dateTime.withZone(DateTimeZone.forID(timezone)).toString(dateFormat, locale),其中dateTime 是DateTime,timezone 是String(已验证跨实例相同,America/Los_Angeles)。 dateFormat 如上所述,dd MMM YYY HH:mm:ss z 和 locale 在多个实例中被验证为 en。
我注意到这个SO question 提出了这样一种想法,即语言环境信息正在丢失,只留下偏移量。尽管如此,无论我对timezone 和locale 使用什么,我都无法重现它。当然,我们不使用forOffsetHours。
编辑:对于它的价值,我不认为这是语言环境,因为我可以使用 .toString(dateFormat, locale) 中的语言环境的组合值,如 new Locale("hasdf") 和预期的日期格式。我可以得到这种意外格式的唯一方法是使用大写的Z 代替小写的z。
第二次编辑:哦,JVM 到处都是一样的。
【问题讨论】:
-
哪个特定时区正在回馈偏移量?您是否知道 TZDB 很久以前就开始删除许多时区的“发明”缩写?
-
所有时区都给出偏移量而不是缩写。
标签: java datetime timezone jodatime datetime-format