如何在Java中将2017-08-01T16:00:00-04:00转换为时间戳?

时间:2020-01-09 15:25:03

标签: java datetime parsing

我正在寻找将Java中默认日期格式的日期转换为时间戳的方法。 我尝试了以下代码,但不起作用:

String string = "2017-08-01T16:00:00-04:00";
DateTimeFormatter formatter = 
                  DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss-mm:ss");
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date);

java.time.format.DateTimeParseException:文本 无法在索引20处解析“ 2017-08-01T16:00:00-04:00”

在 java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) 在 java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) 在java.time.LocalDate.parse(LocalDate.java:400)

1 个答案:

答案 0 :(得分:4)

请勿将LocalDate用于String

  1. 包含有关一天中的时间的信息,如果需要LocalDateTime
  2. 包含偏移量,LocalDateTime不能考虑。

相反,请使用OffsetDateTime

public static void main(String[] args) {
    String string = "2017-08-01T16:00:00-04:00";
    OffsetDateTime odt = OffsetDateTime.parse(string);
    System.out.println(odt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
}

输出:

2017-08-01T16:00:00-04:00

此外,您在DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss-mm:ss");中的模式存在严重缺陷,例如重复项。

您当然可以使用不同于输入的图案打印结果(符合ISO 8601标准):

public static void main(String[] args) {
    String string = "2017-08-01T16:00:00-04:00";
    OffsetDateTime odt = OffsetDateTime.parse(string);
    System.out.println(odt.format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss Z")));
}

这次输出:

01.08.2017 16:00:00 -0400