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

快速(我想)问题。如何将类似的字符串解析"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


哈士奇WWW
浏览 220回答 2
2回答

当年话下

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:002018-07-22T00:00+03:002007-07-21T00:00Z
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java