首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.time.format.DateTimeParseException:无法在索引0处分析文本'Mi Mai 09:17:24 2018‘

java.time.format.DateTimeParseException:无法在索引0处分析文本'Mi Mai 09:17:24 2018‘
EN

Stack Overflow用户
提问于 2018-05-09 15:52:11
回答 2查看 387关注 0票数 4

我试图用德国语言环境格式化一个date time对象,但是我得到了一个错误。

代码语言:javascript
运行
复制
String dateString = "Mi Mai 09 09:17:24 2018";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("EE MMM dd HH:mm:ss yyyy", Locale.GERMAN);
LocalDateTime dateTime = LocalDateTime.parse(dateString, dtf);

错误:

代码语言:javascript
运行
复制
java.time.format.DateTimeParseException: Text 'Mi Mai 09 09:17:24 2018' could not be parsed at index 0
EN

Stack Overflow用户

发布于 2018-05-09 18:01:43

此时此地解决方案:

代码语言:javascript
运行
复制
System.setProperty("java.locale.providers", "COMPAT,CLDR");
String dateString = "Mi Mai 09 09:17:24 2018";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("EE MMM dd HH:mm:ss yyyy", Locale.GERMAN);
LocalDateTime dateTime = LocalDateTime.parse(dateString, dtf);
System.out.println(dateTime);

输出(在Java 9和Java 10上测试):

2018-05-09T09:17:24

与您的代码不同的是,我在程序的开头插入了System.setProperty("java.locale.providers", "COMPAT,CLDR");。根据文档,这不应该真的工作,但当我尝试它时,它确实工作了。相反,正确的方法是在运行Java程序时在命令行上提供相同的系统属性。例如:

代码语言:javascript
运行
复制
java -Djava.locale.providers=COMPAT,CLDR com.ajax.ParseTwoLetterDayOfWeekAbbreviationInGerman

感谢Joep Weijers在注释中指出必须在命令行上设置该属性。有趣的是,相同的系统属性破坏了我的Java8上的代码。

更现代的解决方案:

代码语言:javascript
运行
复制
String dateString = "Mi. Mai 09 09:17:24 2018";

我在字符串中的Mi后面需要一个点(句点)来表示它是一个缩写。

区域设置提供程序

要在德语中解析日期,Java需要所谓的locale数据,包括德语和其他语言中使用的星期和月份的名称和缩写。更令人困惑的是,这些数据来自不止一个来源。在所有的Java 8、9和10中,Java包含至少两个来源的区域设置数据,Java自己的区域设置数据和来自CLDR的标准化区域设置数据,Unicode公共区域设置数据存储库(我不知道是否还有一个或两个更多的来源)。在Java8中,Java自己的数据是默认数据,如果需要这些数据,则需要指定CLDR。在Java 9和更高版本中,情况正好相反: CLDR是缺省的,但旧的Java数据以COMPAT的形式可用。这就解释了the comment by soon,您的代码在Java8上工作,但在Java10上失败。

显然,Java locale数据使用不带点的Mi作为Mittwoch (星期三)的缩写,而CLDR使用带点的Mi.。还有许多其他不同之处。

链接

票数 6
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50248220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档