joda时间无效格式异常

yfwxisqw  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(396)

我想尝试在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)

有什么建议吗?

fzsnzjdm

fzsnzjdm1#

阅读方向

您的格式模式字符串, MMM YYYY dd ,表示月份缩写首先出现,然后是年份,然后是月份的第几天。从外观上看不出来,但当我复制粘贴你的日期字符串时, 18 אוק 2010 ,然后是月日(18),然后是月缩写(10月),最后是年份(2010年)。因为希伯来语是从右向左读的,其余的是从左向右读的,所以这两种情况下的字符串看起来都一样。由于幕后的顺序确实不一致,解析失败。
因此,解决方案有两个(至少):
修复日期字符串以匹配格式模式。
修复格式模式以匹配日期字符串:

DateTimeFormatter f = DateTimeFormat.forPattern("dd MMM YYYY")
        .withLocale(Locale.forLanguageTag("iw-IL"));

在后一种情况下,代码的输出是(在我的时区中):
2010年10月18日星期一00:00:00 cest

相关问题