在Java中解析XML dateTime的最佳方法是什么?

2022-08-31 23:47:02

在Java中解析XML dateTime的最佳方法是什么?法定日期时间值包括 2002-10-10T12:00:00-05:00 和 2002-10-10T17:00:00Z

有没有一个好的开源库,我可以使用,或者我应该使用SimpleDateFormat或类似的来滚动我自己的库?


答案 2

我想你想要来自Joda Time的ISODateTimeFormat.dateTimeNoMillis()。总的来说,我强烈建议你远离Java中内置的日期/日历类。Joda Time的设计要好得多,更喜欢不可变性(特别是格式化程序是不可变的和线程安全的),并且是Java 7中新的日期/时间API的基础。

示例代码:

import org.joda.time.*;
import org.joda.time.format.*;

class Test
{   
    public static void main(String[] args)
    {
        parse("2002-10-10T12:00:00-05:00");
        parse("2002-10-10T17:00:00Z");
    }

    private static final DateTimeFormatter XML_DATE_TIME_FORMAT =
        ISODateTimeFormat.dateTimeNoMillis();

    private static final DateTimeFormatter CHECKING_FORMAT =
        ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC);

    static void parse(String text)
    {
        System.out.println("Parsing: " + text);
        DateTime dt = XML_DATE_TIME_FORMAT.parseDateTime(text);
        System.out.println("Parsed to: " + CHECKING_FORMAT.print(dt));
    }
}

输出:

Parsing: 2002-10-10T12:00:00-05:00
Parsed to: 2002-10-10T17:00:00.000Z
Parsing: 2002-10-10T17:00:00Z
Parsed to: 2002-10-10T17:00:00.000Z

(请注意,在输出中,两者最终都为相同的UTC时间。格式化的输出使用 UTC,因为我们要求它在调用时这样做。withZone


推荐