【发布时间】:2018-02-22 08:52:35
【问题描述】:
我使用以下代码解析datetime:
String parseDate(String tranDateTime, String originalDateFormat, String toDateFormat) throws ParseException {
SimpleDateFormat originalMonthYear = new SimpleDateFormat(originalDateFormat);
Date date = originalMonthYear.parse(tranDateTime);
SimpleDateFormat formatter = new SimpleDateFormat(toDateFormat);
return formatter.format(date);
}
并尝试解析如下日期时间值:
parseDate("2017-08-16T00:00:00Z",
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "yyyy-MM-dd HH:mm:ss");
抛出异常:
java.text.ParseException:无法解析的日期:“2017-08-16T00:00:00Z”
但是,当我将日期值更改为 "2017-08-16T02:54:15.537Z" 时,该函数运行良好。我不知道为什么。
【问题讨论】:
-
“我不知道为什么?”因为你告诉你的程序这样做。该模式包括
.SSS毫秒部分。 -
2017-08-16T02:54:15.537Z之所以有效,是因为您使用了正确的秒部分格式 SS.SSS。 -
SimpleDateFormat和Date早已过时,尤其是前者非常麻烦。我建议您不要使用它们,而是使用java.time, the modern Java date and time API,。作为奖励,OffsetDateTime.parse(String)将在没有任何显式格式化程序的情况下解析您的两个示例字符串。 -
Instant.parse( "2017-08-16T00:00:00Z" )工作得很好,就像you can see in IdeOne.com。是时候放弃那些可怕的旧遗留课程Date和SimpleDateFormat。现在被 Java 8 和 Java 9 中内置的 java.time 类所取代。请参阅 Tutorial by Oracle。 -
@PeterT,也许您应该考虑接受答案?如果不是太难选择。见What should I do when someone answers my question?
标签: java date simpledateformat datetime-parsing