Я пытаюсь разобрать отметки времени, написанные в некоторых xml файлах. Большинство марок времени - это что-то вроде 2009-07-22-07: 00, но иногда я нахожу их чем-то вроде 2009-07-22Z или 2009-07-22z. Пожалуйста, помогите мне, как интерпретировать эти Zs и как их анализировать. Я считаю, что эти z или Z связаны с часовым поясом. Любые обходные пути для их синтаксического анализа так же, как типичные отметки времени?
Как интерпретировать эти метки времени?
Ответ 1
Чтобы добавить к ответу fvu: Java, к сожалению, не имеет встроенного метода для синтаксического анализа (или форматирования формата даты и времени ISO8601, и, еще более, к сожалению, невозможно (легко) разобрать даты ISO8601 с java.text.SimpleDateFormat
.
Известная и популярная библиотека Joda Time имеет хорошую поддержку для дат и времени ISO8601.
Изменить. Начиная с Java 5, в стандартном API существуют классы для анализа и форматирования дат и времени в стандартном формате, часто используемом в XML-документах. Чтобы проанализировать дату:
import java.util.Calendar;
import java.util.Date;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
// ...
String dateString = "..."; // wherever you get this from
XMLGregorianCalendar xcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(dateString);
Calendar cal = xcal.toGregorianCalendar();
Date date = cal.getTime();
Также существуют методы форматирования дат в строки. Подробнее см. Документацию API этих классов.
Ответ 2
Z
означает Zulu. Вы правы, он представляет часовой пояс - в частности UTC.
Ответ 3
Ты прав. Обратный символ относится к часовому поясу.
Z относится к часовому поясу "Зулу", который является только сокращением для часовой пояс UTC (или GMT).
Вы также можете увидеть трейлинг + X или -X. Они относятся к смещению GMT для метки времени. например 2002-05-30+06:00
указывает, что время GMT + 6 часов и нулевые минуты.
Ответ 4
XML использует ISO8601 форматы времени, так что стандарт - это первое место, где можно искать все вещи, скрытые по таймеру в XML.