2012-03-26 2 views
0

В этом кодеданных (временная метка) .toLocaleString всегда возвращает текущую дату

long timestamp=1332782463298; 
Date d=new Date(timestamp); 
date=d.toLocaleString(); 

date всегда текущая дата. Где моя ошибка?

Я также попытался SimpleDateFormat, но она по-прежнему возвращает текущую дату:

date=new SimpleDateFormat("MM.dd.yyyy").format(d); 

ответ

3

Это временная метка является на 26 марта 2012 года (17: 21: 03.298 UTC, чтобы быть точным). Попробуйте соответственно другую метку времени (например, 1332482563298L), и вы получите другую дату ...

Обратите внимание, что вы не должны действительно использовать toLocaleString в любом случае - SimpleDateFormat это путь (или Joda Time, если это возможно). Вы также можете рассмотреть, какой часовой пояс вам нужен.

+0

Но этот сайт преобразует его в 12-й матч http://www.onlineconversion.com/unix_time.htm –

+0

@biovamp: Он преобразует его в 12 марта ** 44204 ** потому что он предполагает (ну, заявляя), что входное значение находится в * секундах * с эпохи Unix, тогда как значение 'Date' находится в * миллисекундах * с эпохи Unix. –

+0

Извините, теперь я понял. Спасибо) –

0

Извините, но вы понимаете, что такое long timestamp=1332782463298;? Это отметка времени UNIX в миллисекундах с 1 января 1970 года, если вы сохраните ее одинаково, date будет содержать все время.

+0

Да, я понимаю. Это значение возвращается с сервера. Похоже, это ошибка серверного программиста. –

0

Используйте календарь вместо:

Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(1332782463298); 
Date d = cal.getTime(); 
String current = SimpleDateFormat("MM.dd.yyyy").format(cal.getTime()).toString(); 
Смежные вопросы