【发布时间】:2018-07-27 12:41:01
【问题描述】:
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, new Locale("SV", "SE"));
((SimpleDateFormat) dateFormat).toPattern();
在 Java 8 中,这一行产生 "yyyy-MM-dd",而在 Java 9 中,它产生 "y-MM-dd"。
这对我们的遗留代码有一些严重的问题,有什么方法可以恢复这种行为吗?
【问题讨论】:
-
@ΦXocę웃Пepeúpaツ 好的,它在 intellij 评估表达式中工作,但不强制转换就无法编译,更新了我的示例。
-
可能是因为CLDR date time patterns?迁移指南的要点是 如果您的应用程序成功启动,请仔细查看您的测试并确保其行为与 JDK 8 上的相同。例如,一些早期采用者注意到他们的日期和货币格式不同.请参阅默认使用 CLDR 区域设置数据。
-
如果您需要字符串
"yyyy-MM-dd",只需使用字符串"yyyy-MM-dd"。如果您向工厂询问区域设置和样式的模式,您接受这是一个移动目标。我怀疑瑞典是否愿意仅仅为了一些遗留的 Java 代码而确定他们的日期格式…… -
在使用 Java 9 时,您到底为什么还在使用早已过时且臭名昭著的麻烦
SimpleDateFormat?如果您现在不想将其从遗留代码中删除,我可以理解,但对于手头的任务,请使用DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle.SHORT, null, IsoChronology.INSTANCE, new Locale("SV", "SE"))(但这并不能解决您的问题,它在 Java 8 和 9 中的行为也不同)。 -
@Jeppz 您查询的语言环境并不重要,它们都不能保证永远不会更改属性。
标签: java date simpledateformat date-format java-9