编程语言
首页 > 编程语言> > 使用Java 8 java.time api解析ISO时间戳(仅限标准版)

使用Java 8 java.time api解析ISO时间戳(仅限标准版)

作者:互联网

我无法从示例中的字符串中获取毫秒的毫秒数.到目前为止,我已尝试过这三种不同的方法,示例显示了最新的尝试.似乎总是可以归结为TemporalAccessor不支持ChronoField.如果我可以成功构建Instant的实例,我可以使用toEpochMilli().

String dateStr = "2014-08-16T05:03:45-05:00"
TemporalAccessor creationAccessor = DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(dateStr);
Instant creationDate = Instant.from(creationAccessor);

请提供简明的答案(不要从头开始构建格式化程序)并仅使用java 8标准发行版(我可以使用Joda,但希望避免依赖项).

编辑:上面代码中的Instant.from抛出:java.time.DateTimeException:无法从TemporalAccessor获取Instant:{OffsetSeconds = -18000},ISO解析为java.time.format类型的2014-08-16T05:03:45 .Parsed

解决方法:

这似乎是我在所有测试版本中发现的错误,包括jdk1.8.0_20b19,但不包括在最终的jdk1.8.0_20中.所以downloading an up-to-date jdk version会解决这个问题.它也在最近的jdk1.9中得到了解决.

请注意,旧的Java 7方式适用于所有版本:

long epochMillis = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
                  .parse(dateStr).getTime();

它还支持获取即时消息:

Instant i=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX").parse(dateStr).toInstant();
long epochMillis = i.toEpochMilli();

但是,如上所述,简单的更新使您的Java 8代码正常工作.

标签:string-parsing,java,java-8,datetime,java-time
来源: https://codeday.me/bug/20191007/1867363.html