使用DateTimeFormatter ofPattern解析日期

时间:2016-02-02 14:58:22

标签: java parsing datetime-format date-parsing

我正在尝试使用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(如上所述),并对其进行相同的操作。我试图同时逃避两者。

冒号是否也需要逃避?

感谢您的任何帮助。

2 个答案:

答案 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工作但不能少