我们的项目需要季度支持,但不幸的是我们使用的是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年以后的年份,对吧?如果是这样,那么获得相同规则的可能性就更高。如果没有,那么您应该真正在乎选择正确的版本以确保您具有相同的规则。也许您还需要应用Oracle的tzupdater-tool。
有关区域的更新:
得益于OP的深入研究,我们可以设置system property specific for ICU4J:com.ibm.icu.util.TimeZone.DefaultTimeZoneType = JDK
无论如何,如果使用ICU4J的唯一原因是对季度的支持,那么也可以选择
要么
使用我的库Time4J(在Java-6 + 7上可运行的v3.x-line)。它还通过较小的尺寸和更好的API(接近Java-8中的java.time
)提供季度支持,包括基于与ICU4J相同的CLDR数据的良好国际化,另请参见pattern doc
要么
使用Threeten-Backport(不利于不进行任何国际化->缺少本地化数据)。