Простой формат даты дает неверную информацию из отметки времени эпохи - PullRequest
0 голосов
/ 09 октября 2018

Я обнаружил, что это дает неправильную дату.но как я не могу это решить.Пожалуйста, кто-нибудь, помогите мне.Я новичок в разработке Android.Спасибо заранее;

String timestamp = "1538970640";

SimpleDateFormat formatter = new SimpleDateFormat("dd MMM 'at' hh:mm a z" );
String dateString = formatter.format(new Date(Long.parseLong(timestamp)));

Это возвращает:

19 Jan at 01:29 AM GMT+06:oo

Но это должно быть:

8 Oct at 9:50 AM GMT+06:00

1 Ответ

0 голосов
/ 09 октября 2018

Конструктор java.util.Date принимает миллисекунды с начала эпохи, не секунд:

Распределяет объект Date и инициализируетон должен представлять указанное количество миллисекунд со стандартного базового времени, известного как «эпоха», а именно 1 января 1970 года, 00:00:00 по Гринвичу.

Следующий код, который использует ms, работает:

String timestamp = "1538970640000";   // use ms NOT s
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM 'at' hh:mm a z" );
String dateString = formatter.format(new Date(Long.parseLong(timestamp)));

08 Oct at 05:50 AM CEST

Демонстрация

Отчасти проблема, с которой вы столкнулись, заключается в том, что в вашем формате даты пропущен компонент года, который фактически приходилдо 1970 года.

...