java SimpleDateFormat

2022-09-04 07:26:47

在Java中,如何解析包含不代表模式的字母的日期字符串?

"2007-11-02T14:46:03+01:00"
String date ="2007-11-02T14:46:03+01:00";
String format = "yyyy-MM-ddTHH:mm:ssz";
new SimpleDateFormat(format).parse(date);

Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 'T'
    at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:769)
    at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:576)
    at java.text.SimpleDateFormat.(SimpleDateFormat.java:501)
    at java.text.SimpleDateFormat.(SimpleDateFormat.java:476)

答案 1

您可以尝试

String format = "yyyy-MM-dd'T'HH:mm:ssz";

参考 : 来自 Javadoc

可以使用单引号 (') 引用文本以避免解释。


答案 2

您尝试解析的时间显示为 ISO 8601 格式。 遗憾的是,不支持与 ISO 8601 相同的所有时区说明符。如果您希望能够正确处理ISO中指定的所有表单,最好的办法是使用Joda时间SimpleDateFormat

此示例直接来自用户指南

DateTime dt = new DateTime("2004-12-13T21:39:45.618-08:00");