Что лучший способ состоит в том, чтобы проанализировать дату и время XML в Java?

Во-первых, вам не нужно использовать StringTokenizer, чтобы получить время строки. Просто передайте свой startTime так:

// Get date from string
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormatter.parse(startTime);

// Get time from date
SimpleDateFormat timeFormatter = new SimpleDateFormat("h:mm a");
String displayValue = timeFormatter.format(date);

// Done!
44
задан 26 May 2009 в 05:12
поделиться

4 ответа

Я думаю, вам нужен ISODateTimeFormat.dateTimeNoMillis () из Joda Time . В основном Я настоятельно рекомендую вам держаться подальше от встроенных классов даты / календаря в Java. Joda Time гораздо лучше спроектирован, поддерживает неизменность (в частности, средства форматирования неизменны и потокобезопасны) и является основой для нового API даты / времени в Java 7.

Пример кода:

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 .)

40
ответ дан 26 November 2019 в 21:44
поделиться

StaxMan абсолютно прав. Чтобы использовать SimpleDateFormat, вам необходимо отключить слабый синтаксический анализ в каждом SimpleDateFormat и перебирать несколько форматов SimpleDateFormat, пока не найдете тот, который анализирует дату без исключения исключения. Если вы оставите слабый синтаксический анализ включенным, вы можете получить совпадение, когда оно вам на самом деле не нужно, а лексическое пространство XSD: DateTime оставляет некоторую гибкость в формате, которую SimpleDateFormat не может обработать в единственное выражение.

XML Schema 1.0 действительно использует ISO 8601, который Joda Time, как предлагает Джон Скит, реализует, так что это допустимый вариант.

Если вы хотите сохранить все это в собственных пакетах Java, вы также можно использовать XMLGregorianCalendar вместе с ​​DatatypeFactory для синтаксического анализа и создания XSD:

6
ответ дан 26 November 2019 в 21:44
поделиться

В идеале пакеты обработки XML, которые поддерживают схему (или должны использоваться в качестве основы для вещей, которые есть), должны предоставлять средства доступа для типизированного содержимого. Я знаю один ( http://woodstox.codehaus.org/ ), но он (пока) не предлагает доступа к дате / времени, а только к более простым типам (числовые, массивы, QNames и т. Д.). Есть просьба поддержать javax.xml.datatype.XMLGregorianCalendar.

Увы, не многие делают. Однако, если вы используете определенный пакет (например, XOM или JDOM и т. Д.), Было бы неплохо задать этот вопрос в их списке пользователей.

0
ответ дан 26 November 2019 в 21:44
поделиться

http://xmlbeans.apache.org/samples/DateTime.html

Есть класс XmlDateTime. Просто сделайте XMLDateTime.stringToDate (xmlDateTime).

1
ответ дан 26 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: