为了账号安全,请及时绑定邮箱和手机立即绑定

从字符串中解析带时区的日期

从字符串中解析带时区的日期

哈士奇WWW 2021-05-13 18:08:39
快速(我想)问题。如何将类似的字符串解析"2018-07-22 +3:00"为OffsetDateTime(将时间设置为0:0:0.0)?DateTimeFormatter formatter =cDateTimeFormatter.ofPattern("yyyy-MM-dd xxx");OffsetDateTime dt = OffsetDateTime.parse("2007-07-21 +00:00", formatter);java.time.format.DateTimeParseException:无法解析文本'2007-07-21 +00:00':无法从TemporalAccessor获取OffsetDateTime:{OffsetSeconds = 0},ISO解析为java类型的2007-07-21。 time.format.Parsed
查看完整描述

2 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

AnOffsetDateTime需要一个时间,但是您的格式字符串不提供该时间,因此您需要DateTimeFormatter将默认时间设置为午夜。


此外,偏移量+3:00无效,因为小时必须为2位数,这意味着您需要先对其进行修复。


这将同时做到:


public static OffsetDateTime parse(String text) {

    // Fix 1-digit offset hour

    String s = text.replaceFirst("( [+-])(\\d:\\d\\d)$", "$10$2");


    DateTimeFormatter formatter = new DateTimeFormatterBuilder()

            .appendPattern("uuuu-MM-dd xxx")

            .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)

            .toFormatter();

    return OffsetDateTime.parse(s, formatter);

}

测试


System.out.println(parse("2018-07-22 +3:00"));

System.out.println(parse("2018-07-22 +03:00"));

System.out.println(parse("2007-07-21 +00:00"));

输出


2018-07-22T00:00+03:00

2018-07-22T00:00+03:00

2007-07-21T00:00Z


查看完整回答
反对 回复 2021-05-26
  • 2 回答
  • 0 关注
  • 193 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信