ICU4j SimpleDateFormatter返回奇数结果

时间:2017-01-27 03:16:07

标签: java scala simpledateformat icu icu4j

我们的项目需要季度支持,不幸的是我们使用的是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

1 个答案:

答案 0 :(得分:0)

关于时区问题:

在1234年,timezone data/rules of ICU4J和你的Java-7-JVM可能不同。通常你应该在1900年之后使用几年,对吧?如果是这样,则获得相同规则的概率要高得多。如果没有,那么你应该真正关心选择正确的版本,以确保你有相同的规则。也许您还需要应用Oracle的tzupdater-tool

  

有关区域的更新:

     

感谢OP的良好研究,我们可以设置system property specific for ICU4Jcom.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(缺点是没有任何国际化 - >缺少本地化数据)。