当前位置: 首页 > 面试题库 >

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

易宣
2023-03-14
问题内容

在示例中,我很难从纪元中获得毫秒数。到目前为止,我已经尝试了这三种不同的方式,并且该示例显示了最新的尝试。似乎总是归结为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: Unable to obtain Instant from TemporalAccessor: {OffsetSeconds=-18000},ISO resolved to 2014-08-16T05:03:45 of type java.time.format.Parsed


问题答案:

这似乎是一个错误,我在之前(包括之后)的所有经过测试的版本中都找到了,jdk1.8.0_20b19但在最终版本中却没有jdk1.8.0_20。因此,下载最新的jdk版本将解决此问题。最新的jdk1.9也解决了该问题。

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

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

它还支持获取Instant

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

但是,如上所述,一个简单的更新使您的Java 8代码可以正常工作。



 类似资料:
  • 在ISO 8601中,持续时间的格式为<code>P[n]Y[n]M[n]DT[n]H[n]M[n]S。 例子: 20秒: 一年两个月三天四小时五分钟六秒: 问题: 给定一个包含iso 8601格式的持续时间的字符串。我想获得这段时间的总秒数。标准C 11中推荐的实现方式是什么? 备注: 例如,boost DateTime中有ptime from _ iso _ string(STD::strin

  • 有没有什么简单的方法可以将ISO 8601字符串持续时间(< code > P(n)Y(n)M(n)DT(n)H(n)M(n)S )转换为< code >时间。持续时间? 来自维基百科的ISO 8601持续时间: 例如,“P3Y6M4DT12H30M5S”表示“三年、六个月、四天、十二小时、三十分钟和五秒”的持续时间。

  • 我有一个ISO 8601格式的持续时间,例如:PT5M或PT120S。 有没有什么方法可以使用moment.js解析这些并获取持续时间中指定的分钟数? 谢谢大家! PS:我研究了解析ISO 8601持续时间,并将ISO 8601时间格式转换为正常持续时间 但很想知道这是否可行。

  • 问题内容: 可以说我有以下json 我想将其解码为以下结构 像这样 这给了我错误 如果我要手动解析它,我会这样做 但是,当时间值来自json字符串时 ,我如何使解码器以上述格式解析它? 问题答案: 在这种情况下,您需要实现自定义编组和非编组功能。 通过遵循json包的Golang文档中的示例,您将获得以下内容:

  • 问题内容: 任何人都知道以下代码是什么类型的JSON(即使是这样!)?我正在从网站的HTML检索此信息。我正在尝试使用JSON解析器在C#中对其进行解析,但是我必须做大量的准备工作,才能根据JSONLint将其格式化为“有效” JSON。例如,变量的名称应全部用双引号而不是根本没有引号。 这将始终具有相同的格式,我很想直接将其解析为C#或Java对象。 问题答案: JSON要求所有名称都必须用双引

  • 问题内容: 如何在Go中解析非标准的日期/时间字符串。例如,如果我想将字符串转换为?该功能应该允许您指定格式。 http://play.golang.org/p/v5DbowXt1x 这导致了恐慌。 从逻辑上讲这是有道理的,因为它应该如何知道哪一天和哪一个月。 其他语言具有类似于以下功能: 我在Go文档中找不到这样的功能,我唯一选择正则表达式吗? 问题答案: time.Parse正在寻找一些关键值