我正在寻找将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)
答案 0 :(得分:4)
请勿将LocalDate
用于String
LocalDateTime
和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