我正在尝试使用java.time.format.DateTimeFormatter
解析包含日期和时间的字符串(我的最终目标是将此字符串中的日期转换为java.time.LocalDate
)。
我在尝试解析日期时不断获取DateTimeParseExceptions。有人可以帮忙吗?
日期格式为“2015-07-14T11:42:12.000 + 01:00”。
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ");
LocalDateTime temp = LocalDateTime.ofInstant(Instant.from(f.parse(this.dateCreated)),
ZoneId.systemDefault());
LocalDate localDate = temp.toLocalDate();
我在ofPattern中尝试了不同的变体,例如试图通过用单引号包围它来逃避T(如上所述),并对其进行相同的操作。我试图同时逃避两者。
冒号是否也需要逃避?
感谢您的任何帮助。
答案 0 :(得分:3)
应该是DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
或DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz");
而不是DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ");
。
来自JAVADoc:
偏移X和x:这根据图案的数量格式化偏移 字母。一个字母只输出小时,例如'+01',除非 分钟是非零的,在这种情况下分钟也输出,例如 “0130”。两个字母输出小时和分钟,没有冒号, 例如'+0130'。三个字母输出小时和分钟,用a 冒号,例如'+01:30'。四个字母输出小时和分钟 可选的第二个,没有冒号,例如'+013015'。五个字母 输出小时和分钟以及可选的秒,带冒号,例如 '01:30:15'。六个或更多字母抛出IllegalArgumentException。 模式字母'X'(大写)将在偏移时输出'Z' 输出将为零,而模式字母'x'(小写)将为 输出'+ 00','+ 0000'或'+00:00'。
答案 1 :(得分:2)
两者" yyyy-MM-dd' HH:mm:ss.SSSZZZZZ"和" yyyy-MM-dd' HH:mm:ss.SSSVV"会工作。请注意,5个Z工作但不能少