我们的项目需要季度支持,不幸的是我们使用的是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
答案 0 :(得分:0)
关于时区问题:
在1234年,timezone data/rules of ICU4J和你的Java-7-JVM可能不同。通常你应该在1900年之后使用几年,对吧?如果是这样,则获得相同规则的概率要高得多。如果没有,那么你应该真正关心选择正确的版本,以确保你有相同的规则。也许您还需要应用Oracle的tzupdater-tool。
有关区域的更新:
感谢OP的良好研究,我们可以设置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(缺点是没有任何国际化 - >缺少本地化数据)。