Парсинг даты. Что упускаю?

Ответить
Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Парсинг даты. Что упускаю?

Сообщение Mikhail_dev » 19 авг 2014, 10:03

Добрый день. С сервера приходит такая дата - "2014-08-18T13:12:56.19Z"
Надо её перевести в Date. Делаю как-то так
[syntax=java5]
String dateStr = "2014-08-18T13:12:56.19Z";
DateFormat readFormat = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ");

Date date = null;
try {
date = readFormat.parse( dateStr );
} catch (java.text.ParseException e) {
e.printStackTrace();
}
[/syntax]
Шаблон я взял с документации http://docs.oracle.com/javase/7/docs/ap ... ormat.html , но это не помогло, получаю ошибку
java.text.ParseException: Unparseable date: "2014-08-18T13:12:56.19Z" (at offset 22)
Как правильно распарсить дату?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Парсинг даты. Что упускаю?

Сообщение altwin » 19 авг 2014, 10:38

Для конструктора дата должна быть представленна в формате unix timestamp, т.е. колличество секунд с January 1, 1970, 00:00:00 GMT, ты просто указываешь опции форматирования. Тебе же сервер отдает уже готовую дату. Вообще -это не хороший человек сделал на сервере, но ты можешь попробовать конвертировать обратно в timestamp и потом использовать:
[syntax=java5]
public class StrDateToUnixTimeStamp {

public static void main(String args[]) {

long unix_timestamp=strDateToUnixTimestamp("03/06/2013");
System.out.println("StringToTimestamp==" + unix_timestamp);

}

private static long strDateToUnixTimestamp(String dt) {
DateFormat formatter;
Date date = null;
long unixtime;
formatter = new SimpleDateFormat("dd/MM/yy");
try {
date = formatter.parse(dt);
} catch (ParseException ex) {

ex.printStackTrace();
}
unixtime = date.getTime() / 1000L;
return unixtime;
}}
[/syntax]

P.S. или пишут, что работает: http://stackoverflow.com/a/2009224
Изображение

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Парсинг даты. Что упускаю?

Сообщение Mikhail_dev » 19 авг 2014, 10:56

Сейчас проверю.
Вообще я спросил того, кто пишет серверную часть, он сказал что это W3C UTC формат, т.е. другими словами похоже это стандарт.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Парсинг даты. Что упускаю?

Сообщение altwin » 19 авг 2014, 11:43

Mikhail_dev писал(а):Сейчас проверю.
Вообще я спросил того, кто пишет серверную часть, он сказал что это W3C UTC формат, т.е. другими словами похоже это стандарт.
Я же говорю он не хороший человек ... W3C UTC - это формат вывода, он не подразумевает вообще передачу данных, т.е. он сделал то, что пытаешься сделать ты, получил timestamp, указал опции форматирования и вывел дату. Если конечно ты парсишь сайт, то да он просто не хороший и не позаботился о том, как людям эту дату получать, тут api нужно и отдавать нормальную дату... Но дело в том, что если ты к примеру пытаешься получить дату сообщения привязанную к нему, но нафига тебе ее конвертировать, просто так в строке и показывай. А иначе лучше попросить человека сделать нормальный rest.
Изображение

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: Парсинг даты. Что упускаю?

Сообщение Viewer » 19 авг 2014, 16:48

Так должно работать, просто невнимательность походу (он не понимает Z в конце шаблона) :)
[syntax=java] String dateStr = "2014-08-18T13:12:56.19Z";

SimpleDateFormat readFormat = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS");



Date date = null;

try {

date = readFormat.parse( dateStr );

} catch (java.text.ParseException e) {

e.printStackTrace();

}[/syntax]

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Парсинг даты. Что упускаю?

Сообщение Mikhail_dev » 19 авг 2014, 20:49

Хм... Странно. Завтра если будет время, то запущу на проверку.

Ответить