java - 使用 DateTimeFormatter 将字符串解析为 LocalDateTime 失败
问题描述
我正在尝试使用 DateTimeFormatter 和 LocalDateTime 将一个简单的字符串 [08/May/2020:09:14:05 +0000] 解析为 LocalDateTime 但它似乎由于某些原因不起作用。我尝试了对格式的不同更改,例如 DD、hh、X、x 或 Z,但它不起作用。
这是代码:
String log = "[08/May/2020:09:14:05 +0000]";
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("[d/MMM/yyyy:HH:mm:ss x]");
LocalDateTime odt = LocalDateTime.parse(log, fmt);
System.out.println(odt);
有什么猜测吗?
解决方案
所有功劳归于安德烈亚斯。他在评论中的建议足以作为答案发布。
String log = "[08/May/2020:09:14:05 +0000]";
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("'['dd/MMM/uuuu:HH:mm:ss xx']'", Locale.US);
LocalDateTime odt = LocalDateTime.parse(log, fmt);
System.out.println(odt);
输出是:
2020-05-08T09:14:05
在格式模式字符串中,方括号[
和]
(通常)用于包含格式的可选部分。由于您要指定文字方括号位于日期时间字符串中,因此请将它们括在格式模式字符串中的撇号中。这取消了括号的含义。
也xx
用于 UTC 偏移量,小时和分钟不带冒号,例如+0000
.
最后,当字符串包含区域设置敏感部分(例如月份缩写)时,始终指定区域设置。在这种情况下,我认为任何说英语的语言环境都可以使用,包括Locale.ENGLISH
、Locale.ROOT
、Locale.UK
和Locale.US
许多其他语言环境。
推荐阅读
- java - 当我按下按钮登录时如何显示任何菜单片段(setVisible:ON)
- javascript - “props.children”如何在 React 组件上工作?
- windows - 将多个 bat 文件的输出重定向到一个控制台窗口
- r - 如何在 dplyr::lead/lag 函数中使用变量名
- react-native - 运行 react-native run-ios 时出错。错误:找不到模块“metro-config”
- ruby-on-rails - 如何修复 Redis::CannotConnectError:连接到 Redis 时出错 (Redis::TimeoutError)
- java - 如何在android中的kotlin类和java类之间传递值?
- javascript - 如何将多张图像移动到一个位置,然后回到原来的位置
- javascript - 调用 something.then(Promise.reject) 结果错误,为什么速记不起作用
- python - 如何从 reddit.com/r/showerthoughts 获取随机热门帖子