如何用Java将2017-08-01T16:00:00-04:00转换为时间戳?
我希望在Java中将日期从默认日期格式转换为时间戳。 我尝试了以下代码,但不起作用:如何用Java将2017-08-01T16:00:00-04:00转换为时间戳?,java,datetime,parsing,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);
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)
at java.time.LocalDate.parse(LocalDate.java:400)
不要将
LocalDate
用于字符串
包含有关一天中时间的信息,需要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.of(“yyyy-MM-dd'HH:MM:ss-MM:ss”)代码>有严重的缺陷,比如重复的项目
当然,您可以使用与输入不同的模式(符合ISO 8601标准)打印结果:
这次输出:
01.08.2017 16:00:00-0400
您缺少一个区域,并且有两次分秒时间。我建议使用其他格式打印input@cricket_007很好的建议,谢谢。。。添加了第二个示例。@deHaar谢谢您的帮助。您还可以指定如何将OffsetDateTime
正确转换为时间戳吗?@StanislavFedosov您是指java.sql.timestamp
?或者像毫秒这样的表示法?看看。。。
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")));
}