1

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

4

1 回答 1

0

关于时区问题:

ICU4J和您的Java-7-JVM的时区数据/规则可能在1234 年有所不同。通常您应该使用 1900 年之后的年份,对吧?如果是这样,那么获得相同规则的可能性要高得多。如果不是,那么您应该真正关心选择正确的版本以确保您具有相同的规则。也许您还需要应用 Oracle 的tzupdater-tool

关于区域的更新:

感谢 OP 的良好研究,我们可以为 ICU4J 设置特定的系统属性com.ibm.icu.util.TimeZone.DefaultTimeZoneType = JDK

无论如何,如果使用 ICU4J 的唯一原因是支持四分之一年,那么另一种选择也可能是

任何一个

使用我的库Time4J(可在 Java-6+7 上运行的 v3.x-line)。它还通过更小的尺寸和更好的 API(更接近java.timeJava-8 所做的)提供四分之一支持,包括基于与 ICU4J 相同的 CLDR 数据的良好国际化,另请参见模式文档

或者

使用Threeten-Backport(缺点是没有任何国际化 -> 缺乏本地化数据)。

于 2017-01-27T09:22:03.327 回答