ICU4j SimpleDateFormatter 返回奇怪的结果
ICU4j SimpleDateFormatter returning odd results
我们的项目需要季度支持,不幸的是我们在 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
关于时区问题:
可能是 Oracle 的 timezone data/rules of ICU4J and your Java-7-JVM are different for the year 1234. Normally you should use years after 1900, right? If so then the probability to get the same rules are much higher. If not then you should really care about choosing the right versions to ensure you have the same rules. Maybe you also need to apply the 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 的唯一原因是 支持 quarter-years 那么替代方案也可能是
任一
使用我的图书馆Time4J (v3.x-line runnable on Java-6+7). It also offers quarter support by a lower size and better API (nearer to what java.time
in Java-8 does) including good internationalization based on same CLDR-data as ICU4J does, see also pattern doc
或
使用 Threeten-Backport(缺点是没有任何国际化 -> 缺少本地化数据)。
我们的项目需要季度支持,不幸的是我们在 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
关于时区问题:
可能是 Oracle 的 timezone data/rules of ICU4J and your Java-7-JVM are different for the year 1234. Normally you should use years after 1900, right? If so then the probability to get the same rules are much higher. If not then you should really care about choosing the right versions to ensure you have the same rules. Maybe you also need to apply the 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 的唯一原因是 支持 quarter-years 那么替代方案也可能是
任一
使用我的图书馆Time4J (v3.x-line runnable on Java-6+7). It also offers quarter support by a lower size and better API (nearer to what java.time
in Java-8 does) including good internationalization based on same CLDR-data as ICU4J does, see also pattern doc
或
使用 Threeten-Backport(缺点是没有任何国际化 -> 缺少本地化数据)。