- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试解析此字符串 2020-05-20 14:27:00.943000000 +00:00
和此 Wed May 20 14:27:00 CEST 2020
到 ISO_INSTANT,但始终返回此异常
java.time.format.DateTimeParseException: Text '2020-05-20 14:27:00.943000000 +00:00' could not be parsed at index 10
我的代码是:
protected Instant parseDateTime(String fechaHora) {
DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT;
TemporalAccessor temporalAccessor = formatter.parse(fechaHora);
LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
Instant result = Instant.from(zonedDateTime);
return result; }
如何转换这种类型?
最佳答案
OffsetDateTime.parse(
"2020-05-20 14:27:00.943000000 +00:00" ,
DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss.SSSSSSSSS xxx" )
)
.toInstant()
您的代码在几个方面存在缺陷。
TemporalAccessor
的使用在这里是不必要和不合适的。引用its Javadoc :
This interface is a framework-level interface that should not be widely used in application code. Instead, applications should create and pass around instances of concrete types
LocalDateTime
在这里不合适,因为它去除了重要信息、时区或与 UTC 的偏移量。
您指定的格式化程序的格式化模式与您的输入不匹配。
处理您的输入字符串以符合标准 ISO 8601格式。用 T
替换日期和时间之间的空格。删除时间和偏移量之间的空格。
String input = "2020-05-20 14:27:00.943000000 +00:00" ;
String[] strings = input.split( " " ) ;
String modifiedInput = strings[0] + "T" + strings[1] + strings[2] ;
解析为 OffsetDateTime
,这是一个在与 UTC 的偏移量上下文中带有时间的日期。
OffsetDateTime odt = OffsetDateTime.parse( modifiedInput ) ;
或者,定义格式模式以匹配您的输入字符串。使用 DateTimeFormatter
类。这已在 Stack Overflow 上多次介绍,因此请搜索以了解更多信息。
您尝试使用的预定义格式化程序 DateTimeFormatter.ISO_INSTANT
与您的输入不匹配。您的输入不符合该格式化程序使用的 ISO 8601 标准。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss.SSSSSSSSS xxx" ) ;
String input = "2020-05-20 14:27:00.943000000 +00:00" ;
OffsetDateTime odt = OffsetDateTime.parse( input , f ) ;
查看此 code run live at IdeOne.com .
odt.toString(): 2020-05-20T14:27:00.943Z
如果你需要返回一个Instant
,调用toInstant
。
Instant instant = odt.toInstant() ;
要在时区上下文中查看同一时刻,请应用 ZoneId
以获取 ZonedDateTime
对象。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;
OffsetDateTime
和 ZonedDateTime
对象代表同一时刻,时间轴上的同一点。
关于java - 将非 ISO 8601 解析为 ISO_INSTANT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61936487/
我有像 Thu Feb 04 21:25:12 CET 2021 和 Sat Oct 03 11:57:00 CEST 2020 这样的字符串我需要将其转换为 ISO_Instant 时间,但我的代码
我正在使用 DateTimeFormatter,但在 999 毫秒后的毫秒结束时,它会丢失毫秒字段。如果 java 存在此问题,请告诉我 public static void main(String[
我昨天创建了这个很棒的静态方法,它工作得很好 - 昨天 但是,今天它给了我这个错误。我猜这是因为 Z 之前有太多的 0。 任何人都可以推荐如何以简洁的方式(Java 8)解析这种类型的 String
我想将类 java.time.Instant 的实例与字符串相互转换。 我想使用与 java.time.format.DateTimeFormatter.ISO_INSTANT 完全相同的格式,唯一的
我正在尝试解析此字符串 2020-05-20 14:27:00.943000000 +00:00 和此 Wed May 20 14:27:00 CEST 2020到 ISO_INSTANT,但始终返回
我正在尝试解析此字符串 2020-05-20 14:27:00.943000000 +00:00 和此 Wed May 20 14:27:00 CEST 2020到 ISO_INSTANT,但始终返回
一般来说,我是 Java 和 DateTime 格式的新手,我应该从 CSV 文件转换 GPS 数据。 我的问题是如何针对我正在使用的格式完成此操作。我从 GPS 数据中获取的数据点格式如下: tim
在Java 8的java.time包中,有这个formatter java.time.format.DateTimeFormatter.ISO_INSTANT ( JavaDoc ) 允许在解析和格式
我正在尝试将围绕日期时间管理的各种代码混合清理到仅 Java 8 java.time命名空间。现在我有一个关于默认 DateTimeFormatter 的小问题对于 Instant . DateTim
所以我希望这段代码可以在新的 Java 8 日期/时间包下工作,因为它所做的只是使用相同的内置 DateTimeFormatter 实例 (ISO_INSTANT) 将给定的 ZonedDateTim
我是一名优秀的程序员,十分优秀!