在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)发布于 2011-06-20 11:23:04
您尝试解析的时间似乎在
ISO 8601格式
..。
不幸的是,它并不支持与ISO 8601相同的时区说明符。如果您希望能够正确处理ISO中指定的所有表单,最好的方法是使用
Joda时间
..。
此示例直接从
用户指南
DateTime dt = new DateTime("2004-12-13T21:39:45.618-08:00");发布于 2011-06-20 11:08:43
你可以试试
String format = "yyyy-MM-dd'T'HH:mm:ssz";参考:来自
Javadoc
文本可以用单引号(')引起来,以避免解释。
发布于 2021-02-17 05:19:56
不需要格式化程序
现在是发布现代答案的时候了,使用java.time的答案,现代Java date and time API。您的格式是ISO8601,java.time的类通常将最常见的ISO8601变体解析为它们的默认格式,也就是说,没有任何显式的格式化程序。
String date ="2007-11-02T14:46:03+01:00";
OffsetDateTime dateTime = OffsetDateTime.parse(date);
System.out.println(dateTime);输出为:
2007-11-02T14:46:03+01:00
是的,java.time也提供了ISO8601格式
方法,在打印对象时隐式调用。
用单引号括起原义字母
要按要求回答问题,您可以用单引号将字母括起来
将它们作为文字字母,而不是格式说明符。在真实的代码中执行以下操作没有任何意义,只是为了演示:
DateTimeFormatter isoFormatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX");
String date ="2007-11-02T14:46:03+01:00";
OffsetDateTime dateTime = OffsetDateTime.parse(date, isoFormatter);结果和之前一样。
链接
Oracle教程:日期和时间
解释如何使用java.time。
https://stackoverflow.com/questions/6406470
复制相似问题