希伯来语的 Joda-Time 无效格式异常
Joda-Time Invalid format exception for Hebrew language
我想在 Java-11 上尝试解析如此简单的日期。
日期语言是:希伯来语
日期格式为:“MMM YYYY dd”
示例日期为:“18 年 2010 年”
我的代码如下:
DateTimeFormatter f = DateTimeFormat.forPattern("MMM YYYY dd")
.withLocale(Locale.forLanguageTag("iw-IL"));
String dateInString = "18 אוק 2010";
Date d = f.parseDateTime(dateInString).toDate();
System.out.println(d);
但是当我尝试它时,我得到一个错误,如:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "18 אוק 2010" is malformed at "אוק 2010"
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:945)
有什么建议吗?
阅读方向
您的格式模式字符串 MMM YYYY dd
表示月份缩写在前,然后是年份,然后是月份中的第几天。从外观上看是不可能的,但是当我复制粘贴你的日期字符串时,18 אוק 2010
,然后是月份中的第几天 (18),然后是月份缩写(十月的 אוק),最后是年份(2010 年) ).由于希伯来语是从右到左阅读的,其余的是从左到右阅读的,所以字符串在两种情况下看起来都一样。并且由于后台真的不一致,所以解析失败。
所以解决方案有两个(至少):
修正您的日期字符串以匹配格式模式。
修正您的格式模式以匹配日期字符串:
DateTimeFormatter f = DateTimeFormat.forPattern("dd MMM YYYY")
.withLocale(Locale.forLanguageTag("iw-IL"));
在后一种情况下,您的代码输出是(在我的时区):
Mon Oct 18 00:00:00 CEST 2010
它并不适用于所有 Java 版本
… but this doesnt work on java-11. But it works on java-8
那是因为默认的语言环境数据在Java9中已经改变。直到Java8Java自己的语言环境数据被用作默认值。来自 Java 9 CLDR(Unicode 通用语言环境日期存储库)是默认值。这里十月的希伯来语缩写是 אוק׳。有关如何解析您在 Java 9、11 及更高版本上工作的字符串,请参阅 。
我想在 Java-11 上尝试解析如此简单的日期。
日期语言是:希伯来语 日期格式为:“MMM YYYY dd” 示例日期为:“18 年 2010 年”
我的代码如下:
DateTimeFormatter f = DateTimeFormat.forPattern("MMM YYYY dd")
.withLocale(Locale.forLanguageTag("iw-IL"));
String dateInString = "18 אוק 2010";
Date d = f.parseDateTime(dateInString).toDate();
System.out.println(d);
但是当我尝试它时,我得到一个错误,如:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "18 אוק 2010" is malformed at "אוק 2010"
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:945)
有什么建议吗?
阅读方向
您的格式模式字符串 MMM YYYY dd
表示月份缩写在前,然后是年份,然后是月份中的第几天。从外观上看是不可能的,但是当我复制粘贴你的日期字符串时,18 אוק 2010
,然后是月份中的第几天 (18),然后是月份缩写(十月的 אוק),最后是年份(2010 年) ).由于希伯来语是从右到左阅读的,其余的是从左到右阅读的,所以字符串在两种情况下看起来都一样。并且由于后台真的不一致,所以解析失败。
所以解决方案有两个(至少):
修正您的日期字符串以匹配格式模式。
修正您的格式模式以匹配日期字符串:
DateTimeFormatter f = DateTimeFormat.forPattern("dd MMM YYYY") .withLocale(Locale.forLanguageTag("iw-IL"));
在后一种情况下,您的代码输出是(在我的时区):
Mon Oct 18 00:00:00 CEST 2010
它并不适用于所有 Java 版本
… but this doesnt work on java-11. But it works on java-8
那是因为默认的语言环境数据在Java9中已经改变。直到Java8Java自己的语言环境数据被用作默认值。来自 Java 9 CLDR(Unicode 通用语言环境日期存储库)是默认值。这里十月的希伯来语缩写是 אוק׳。有关如何解析您在 Java 9、11 及更高版本上工作的字符串,请参阅