【问题标题】:Convert string to DateTime object with Java 8使用 Java 8 将字符串转换为 DateTime 对象
【发布时间】:2016-08-01 02:20:51
【问题描述】:

我想用新的 Java 8 时间库以最简单的方式将以下带有分区偏移量的字符串转换为 DateTime 类型:

2016-04-11T22:56:00.000-0500

我已经尝试过 ISO_OFFSET_DATE_TIME 格式和 ZonedDateTime 对象,但我似乎无法找到一种简单的方法来做到这一点。提前致谢。

【问题讨论】:

  • 区域偏移解析器期望偏移的格式为-05:00(带有:
  • Java-8 没有 DateTime 类型。也许你已经把它和 Joda-Time 混淆了。 Java-8 等效项将是 ZonedDateTime(或在本例中为 OffsetDateTime)。
  • @MenoHochschild 我错了,我的意思是 LocalDateTime 对象。

标签: java datetime java-8 java-time zoneddatetime


【解决方案1】:

我认为您不会找到一个内置的格式化程序来解析该字符串,但创建一个相当简单:

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSx");
OffsetDateTime date = OffsetDateTime.parse("2016-04-11T22:56:00.000-0500", fmt);

【讨论】:

    【解决方案2】:

    您的问题的解决方案应如下所示:

    String ts = "2016-04-11T22:56:00.000-0500";
    ZonedDateTime zdt = ZonedDateTime.parse(ts, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    

    【讨论】:

    • 获取以下异常(使用 Java 1.8_77 作为上下文),我认为投诉与分区偏移量之前的连字符有关:线程“main”中的异常 java.time.format.DateTimeParseException : 文本'2016-04-11T22:56:00.000-0500' 无法在 java.time.format.DateTimeFormatter.parseResolved0(Unknown Source) at java.time.format.DateTimeFormatter.parse(Unknown Source) 的索引 23 处解析在 java.time.ZonedDateTime.parse(Unknown Source)
    • 提供的格式化程序 ISO_OFFSET_DATE_TIME 可能未定义为处理出现在测试字符串中的小数秒。它还可能期望偏移量中的小时和分钟之间有一个冒号。因此,您需要使用DateTimeFormatter.ofPattern( ) 函数构建自己的格式化程序来处理这种情况。
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 2016-10-07
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2015-01-09
    相关资源
    最近更新 更多