Подтвердить что ты не робот

Преобразование временной метки Unix в String со временем Joda

При попытке конвертировать временную метку Unix из базы данных в строку в формате даты.

int _startTS = evtResult.getInt("start"); //outputs 1345867200
Long _sLong = new Long(_startTS); //outputs 1345867200
//I've also tried: Long _sLong = new Long(_startTS*1000); //outputs 1542436352
DateTime _startDate = new DateTime(_sLong); //outputs 1970-01-16T08:51:07.200-05:00

Временная метка предназначена для: Sat, 25 Aug 2012. Я понятия не имею, почему 1970 год всегда является результатом, поэтому, надеюсь, кто-то может увидеть тупую ошибку, которую я делаю.

4b9b3361

Ответ 1

Время Unix в секундах, время Java - миллисекунды

Вам нужно будет несколько его на 1000

DateTime _startDate = new DateTime(_sLong * 1000L);

Вы можете проверить этот ответ вне

Ответ 2

Временная метка Unix представляет собой число SECONDS, поскольку 1970-01-01 00:00:00.

Конструктор

DateTime(long instant) нуждается в количестве МИЛЛИОНОВ.

long _startTS = ((long) evtResult.getInt( "start" )) * 1000;
DateTime _startDate = new DateTime( _startTS );

РЕДАКТИРОВАТЬ: или используйте метод getLong (..) на вашем evtResult, чтобы избежать приведения к длительности.

Ответ 3

Когда вы это сделаете: _startTS*1000, Java предполагает, что вы хотите int, потому что _startTS - это int (поэтому значение равно 1542436352). Попробуйте сделать это как долгое:

Long _sLong = new Long(((long)_startTS)*1000);