将字符串时间戳解析为即时抛出不受支持的字段:InstantSeconds

新手上路,请多包涵

我正在尝试将 String 转换为 Instant。你能帮我吗?

我得到以下异常:

由以下原因引起:java.time.temporal.UnsupportedTemporalTypeException:不受支持的字段:java.time.format.Parsed.getLong(Parsed.java:203)的 InstantSeconds 在 java.time.Instant.from(Instant.java:373)

我的代码基本上是这样的

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String timestamp = "2016-02-16 11:00:02";
TemporalAccessor temporalAccessor = formatter.parse(timestamp);
Instant result = Instant.from(temporalAccessor);

我正在使用 Java 8 更新 72。

原文由 keiki 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 406
2 个回答

以下是如何获得具有默认时区的 Instant。由于缺少时区,您的 String 无法直接解析为 Instant 。所以你总是可以得到默认的

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

String timestamp = "2016-02-16 11:00:02";
TemporalAccessor temporalAccessor = formatter.parse(timestamp);
LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
Instant result = Instant.from(zonedDateTime);

原文由 Michael Gantman 发布,翻译遵循 CC BY-SA 4.0 许可协议

一种更简单的方法是在声明格式化程序对象时将默认时区添加到格式化程序对象中

final DateTimeFormatter formatter = DateTimeFormatter
                                    .ofPattern("yyyy-MM-dd HH:mm:ss")
                                    .withZone(ZoneId.systemDefault());
Instant result = Instant.from(formatter.parse(timestamp));

原文由 jdex 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题