java - 日期格式将 2019-08-07T20:11:59.6250889+09:30 解析为 UTC Java LocalDateTime
问题描述
我尝试将日期字符串 2019-08-07T20:11:59.6250889+09:30 转换为 LocalDateTime 格式 yyyy-MM-dd HH:mm:ss 格式
String date = "2019-08-07T20:11:59.6250889+09:30";
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
LocalDateTime startDate = LocalDateTime.parse(date, format);
堆栈跟踪
Exception in thread "main" java.time.format.DateTimeParseException: Text '2019-08-07T20:11:59.6250889+09:30' could not be parsed at index 23
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
at Testing.main(Testing.java:11)
解决方案
您的格式是内置的。
String date = "2019-08-07T20:11:59.6250889+09:30";
DateTimeFormatter format = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
LocalDateTime startDate = LocalDateTime.parse(date, format);
System.out.println(startDate);
输出:
2019-08-07T20:11:59.625088900
格式为 ISO 8601。用于 ISO 8601 最重要变体的格式化程序内置于 java.time。所以不要为编写自己的格式模式字符串而苦恼。只需使用预定义的DateTimeFormatter.ISO_OFFSET_DATE_TIME
.
@shmosel 在评论中是正确的:DateTimeFormatter
从字面上获取小数位数,因此要解析您需要的 7 位小数的一小部分SSSSSSS
(7 S
)。java.time 还具有解析可变小数位数的能力。为此,您需要一个DateTimeFormatterBuilder
及其appendFraction
方法。
通过您的问题标题,您的意思是您想要UTC时间吗?这将需要显式转换(因为您的字符串与 UTC 的偏移量为 +09:30):
LocalDateTime startDate = OffsetDateTime.parse(date)
.withOffsetSameInstant(ZoneOffset.UTC)
.toLocalDateTime();
2019-08-07T10:41:59.625088900
链接
推荐阅读
- html - 我做的事情不是让sidenav模式根据屏幕宽度动态切换吗?
- angular - 尝试将 DatePicker 导入 app.module.ts 时出现离子错误
- java - 在 Windows 上使用 Ubuntu 的子系统进行“make”会产生 java 错误
- cobol - 将文件转换为显示格式的通用过程
- python-3.x - 不和谐机器人问题。discord.py AttributeError:'Bot'对象没有属性'channel'
- bash - 码头工人 | PM2 | Bash - PM2 错误:错误:解释器 bash 在 PATH 中不可用
- r - 如何在模块之间传递按钮的“点击”动作?
- python - 使用 apply 和 lambda 遍历收集值的数据框
- sql - 从同一个表中删除重复行的 SQL 代码
- r - 检查 POSIXct 是否有与之关联的时间