首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java/Scala中将带有偏移量的ISO8601格式的时间戳转换为EpochMilli

如何在Java/Scala中将带有偏移量的ISO8601格式的时间戳转换为EpochMilli
EN

Stack Overflow用户
提问于 2018-07-23 02:22:22
回答 2查看 320关注 0票数 0

我有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处解析

EN

回答 2

Stack Overflow用户

发布于 2018-07-23 03:56:33

它不起作用,因为Instant希望输入是UTC格式的。但是你的offset比协调世界时晚了5个小时(-05:00),而不是协调世界时(零的偏移量)。

使用OffsetDateTime解析字符串。然后通过提取Instant来调整为UTC。

代码语言:javascript
复制
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);

将打印:

代码语言:javascript
复制
2017-05-22T01:37:08.021Z
1495417028021
票数 1
EN

Stack Overflow用户

发布于 2018-07-23 03:10:08

看起来你添加了比所需的更多的信息。

看看这个- https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#toEpochMilli--

注意到你是如何拥有一个-05:00的吗?注意-标志。这是第23个字符,这比要求的要多。他们只想要日期后跟时间,而不是时区。请记住,时区与纪元无关,因为纪元假定您使用的是-0:00时区(英格兰格林威治)。

编辑-基本上,找到您想要的时间,将其放入格林威治时间,然后通过该方法再次运行它,但不将时区作为参数的一部分。

或者,如果当前时间是正确的(考虑到-05:00,它很可能不是正确的),那么就去掉-05:00

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51468029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档