java - 如何使用 Java 时间库将符合 ISO 标准的字符串解析为日期
问题描述
我有各种格式的时间戳,例如:
2018-07-21T00:50:39
2017-11-20T23:18:27.529Z
我需要将它们解析为 java.util.Date,并尝试了以下方法,它们都适用于第一种格式,但第二种格式失败。
这是我尝试过的方法,但它是错误的:
1.
private Date try3(String dateString) {
return Date.from(Instant.parse(dateString).atZone(ZoneId.of("UTC")).toInstant());
}
它在第一种格式时失败,错误:
java.time.format.DateTimeParseException: Text '2017-11-20T23:18:28' could not be parsed at index 19
2.
private Date try2(String dateString) {
return Date.from(LocalDateTime.parse(dateString).atZone(ZoneId.of("UTC")).toInstant());
}
对于第二种格式,此方法抛出错误:
java.time.format.DateTimeParseException: Text '2017-11-20T23:18:27.529Z' could not be parsed, unparsed text found at index 23
3:
private Date try1(String dateString) {
return Date.from(ZonedDateTime.parse(dateString,
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss").withZone(ZoneId.of("UTC"))).toInstant());
}
对于第二种格式,上述方法抛出错误:
java.time.format.DateTimeParseException: Text '2017-11-20T23:18:27.529Z' could not be parsed, unparsed text found at index 19
我最终得到了Joda 图书馆:
private Date try4(String dateString) {
return new DateTime(dateString).withZone(DateTimeZone.UTC).toDate();
}
但是在 Java 时间库中真的有办法做到这一点吗?
解决方案
推荐阅读
- android - ProgressDialog 显示时间 - Android 工作室
- php - 如何在单选按钮上禁用文本字段,在另一个单选按钮上启用文本并使用链接清除这三个
- sql - 从 PostgreSQL 中的输入数组创建一个数组
- django - Django模型不允许一对多关系
- javascript - 制作一个按钮来创建盒子
- listview - JAVAFX ListView - 是否可以隐藏 ID“列”,或者我应该使用单列 TableView?
- python - 如何在python中将9个月零7天添加到日期“27-05-2018”
- security - 相互认证 - 设置、流程、验证
- rx-java2 - RxJava 运算符将随机大小的列表流分割成统一大小的列表,而不会丢失项目
- sass - 覆盖时未应用 sass 样式