微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

希伯来语的 Joda-Time 无效格式异常

如何解决希伯来语的 Joda-Time 无效格式异常

我想尝试在 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 年) )。由于希伯来语是从右到左阅读,其余的从左到右阅读,因此这两种情况下的字符串看起来相同。而且由于顺序确实在幕后不一致,因此解析失败。

所以解决方案有两个(至少):

  1. 修正您的日期字符串以匹配格式模式。

  2. 修正您的格式模式以匹配日期字符串:

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

在后一种情况下,您的代码输出是(在我的时区):

2010 年 10 月 18 日星期一 00:00:00 CEST

它并不适用于所有 Java 版本

...但这在 java-11 上不起作用。但它适用于 java-8

那是因为默认的语言环境数据在 Java 9 中发生了变化。直到 Java 8,Java 自己的语言环境数据被用作默认值。从 Java 9 开始,CLDR(Unicode 通用语言环境日期存储库)是默认设置。这里十月的希伯来语缩写是אוק׳。有关如何解析已在 Java 9、11 及更高版本上工作的字符串,请参阅 JDK dateformatter parsing DayOfWeek in German locale,java8 vs java9

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?