Java SimpleDateFormat 模式,用于 W3C XML 日期和时区

2022-09-01 08:05:25

我正在尝试解析 W3C XML 架构日期,如下所示

"2012-05-15T07:08:09+03:00"

它符合 ISO 8601 版本的 W3C XML Schema dateTime 规范。

在上面的日期中,时区标识符是 ,但显然不存在表示它的模式。"+03:00"SimpleDateFormat

如果时区为 ,则(大写)将适用,并且模式将为"+0300"ZSimpleDateFormat

yyyy-MM-dd'T'HH:mm:ssZ

同样,如果时区为 ,则(小写)将适用,并且模式将为"GMT+03:00"zSimpleDateFormat

yyyy-MM-dd'T'HH:mm:ssz

(顺便说一句,大写也有效)。'Z'

那么,是否有一种模式或解决方法来表示上述日期而不对日期字符串进行预处理?SimpleDateFormat


答案 1

如果您使用 Java 7+,则此模式应该有效(适用于 ISO 8601 时区):X

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");

答案 2

像这样的东西怎么样:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"){ 
    public Date parse(String source,ParsePosition pos) {    
        return super.parse(source.replaceFirst(":(?=[0-9]{2}$)",""),pos);
    }
};