我们的项目需要季度支持,不幸的是我们使用的是 java 1.7,并且由于不幸的其他原因而陷入困境。
我们添加了 ICU4j 库以使用其中提供的 SimpleDateFormat。
不幸的是,它解析日期的方式非常奇怪(见下文)。任何帮助,将不胜感激。
val formatter = new java.text.SimpleDateFormat("yyyy")
val formatter2 = new com.ibm.icu.text.SimpleDateFormat("yyyy")
Array(formatter2.parse("1234"), formatter.parse("1234"))
结果
0 = {Date@10561} "Sun Jan 01 00:00:00 PST 1234"
1 = {Date@10563} "Sun Jan 01 00:12:28 PST 1234"
我已经广泛阅读了文档,但不确定为什么它会使用偏移量进行解析。我确信它是 api 的一部分,希望有人能解释我的困难。任何帮助,将不胜感激。
http://www.icu-project.org/apiref/icu4j/com/ibm/icu/text/SimpleDateFormat.html
最佳答案
关于时区问题:
可能是 timezone data/rules of ICU4J和你的Java-7-JVM 1234 年是不同的。通常您应该使用 1900 年之后的年份,对吗?如果是这样,那么获得相同规则的概率要高得多。如果没有,那么您应该真正关心选择正确的版本,以确保您拥有相同的规则。也许您还需要申请tzupdater-tool甲骨文的。
Update about zones:
Thanks to the good research of OP, we can set a system property specific for ICU4J:
com.ibm.icu.util.TimeZone.DefaultTimeZoneType = JDK
无论如何,如果使用 ICU4J 的唯一原因是支持季度,那么替代方案也可能是
或者
使用我的图书馆Time4J (v3.x-line 可在 Java-6+7 上运行)。它还通过更小的尺寸和更好的 API(更接近 Java-8 中的 java.time 的功能)提供季度支持,包括基于与 ICU4J 相同的 CLDR 数据的良好国际化,另请参阅 pattern doc
或
使用Threeten-Backport (缺点是没有任何国际化 -> 缺乏本地化数据)。
关于java - ICU4j SimpleDateFormatter 返回奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41886501/