我有ISO 8601格式的字符串与时区偏移。格式为“2017-05-21T20:37:08.021-05:00”。我想在Java/Scala语言中转换成EpochMilli。
Instant.parse( "2017-05-21T20:37:08.021-05:00“) .toEpochMilli()
出现错误java.time.format.DateTimeParseException: Text '2017-05-21T20:37:08.021-05:00‘无法在索引23处解析
发布于 2018-07-22 19:56:33
它不起作用,因为Instant
希望输入是UTC格式的。但是你的offset比协调世界时晚了5个小时(-05:00
),而不是协调世界时(零的偏移量)。
使用OffsetDateTime
解析字符串。然后通过提取Instant
来调整为UTC。
OffsetDateTime odt = OffsetDateTime.parse("2017-05-21T20:37:08.021-05:00");
Instant i = odt.toInstant();
long millis = i.toEpochMilli();
System.out.println(i);
System.out.println(millis);
将打印:
2017-05-22T01:37:08.021Z
1495417028021
发布于 2018-07-22 19:10:08
看起来你添加了比所需的更多的信息。
看看这个- https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#toEpochMilli--
注意到你是如何拥有一个-05:00
的吗?注意-
标志。这是第23个字符,这比要求的要多。他们只想要日期后跟时间,而不是时区。请记住,时区与纪元无关,因为纪元假定您使用的是-0:00时区(英格兰格林威治)。
编辑-基本上,找到您想要的时间,将其放入格林威治时间,然后通过该方法再次运行它,但不将时区作为参数的一部分。
或者,如果当前时间是正确的(考虑到-05:00
,它很可能不是正确的),那么就去掉-05:00
。
https://stackoverflow.com/questions/51468029
复制相似问题