2013-03-14 2 views
3

У меня возникли проблемы с форматированием следующей даты/времени:Имея проблемы форматирования конкретного формата дата/время

2013-01-10T17:04:24.3787635-02:00 

Теперь я понимаю 2013-01-10 дата (очевидно).

17:04:24.3787635, вероятно, время, хотя я не знаю, что означают цифры после точки.

-02:00 Я предполагаю, что это часовой пояс (GMT).

Как я могу разобрать это в java? (возможно, с использованием JodaTime).

ответ

1

Вы можете использовать JodaTime разобрать эту дату:

String time = "2013-01-10T17:04:24.3787635-02:00"; 
DateTimeFormatter df = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"); 
DateTime dateTime = df.parseDateTime(time); 

Цифры после запятой (.) являются долями секунды, обозначенной S в JodaTime'sDateTimeFormat. Z представляет шаблон часового пояса.

+0

Большое спасибо за помощь. Хотя у меня есть последний вопрос. Когда я выполняю 'dateTime.getZone(). GetID()', он возвращает мне 'America/Sao_Paulo'. Я ожидал «GMT-3». Есть ли способ вернуть мне то, что я ожидаю, или просто возвращает мне место, где часовой пояс применяется как ссылка? –

1

Попробуйте использовать этот шаблон:

"yyyy-MM-dd'T'HH:mm:ss.SSSXXX" 

Что можно разобрать дату в следующем формате:

2001-07-04T12:08:56.235-07:00 

Хотя, 3787635 в строке источника хлопотно. Это не похоже на миллисекунды.

Посмотрите на java.text.SimpleDateFormat для получения дополнительной информации о шаблонах.

Вы также можете попробовать DatatypeConverter.parseDateTime, который возвращает объект java.util.Calendar.

DatatypeConverter.parseDateTime("2013-01-10T17:04:24.3787635-02:00").getTime() 

Вышеуказанный оператор выполняется без каких-либо ошибок.

0

Формат вашей временной строки - это формат ISO8601. Класс JodaTime ISODateTimeFormat будет поддерживать этот формат напрямую. Однако вы потеряете любую точность за миллисекунду.

String time = "2013-01-10T17:04:24.3787635-02:00"; 
DateTime dateTime = ISODateTimeFormat.dateTime().parseDateTime(time); 
0

Этот формат может быть корректно проанализирован только с помощью javax.xml.XMLGregorianCalendar. Вы не можете использовать SimpleDateFormat, потому что он принимает SSS как количество миллисекунд, а не как дробную часть секунды.

String s = "2013-01-10T17:04:24.3787635-02:00"; 
    DatatypeFactory dtf = DatatypeFactory.newInstance(); 
    Date date = dtf.newXMLGregorianCalendar(s).toGregorianCalendar().getTime(); 
Смежные вопросы