Преобразование временной метки Unix в строку с помощью Joda Time

При попытке преобразовать временную метку 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 всегда выводится, так что, надеюсь, кто-нибудь увидит глупую ошибку, которую я совершаю.


person locrizak    schedule 20.08.2012    source источник


Ответы (3)


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

надо умножить на 1000

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

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

person MadProgrammer    schedule 20.08.2012
comment
Отредактировано. Вы должны использовать заглавную букву «L» для длинных слов. Намного читабельнее. - person mR_fr0g; 12.03.2013

Временная метка Unix – это число СЕКУНД с 1970-01-01 00:00:00.

DateTime(long instant) требуется количество МИЛЛИСЕКУНД.

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

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

person Strelok    schedule 20.08.2012
comment
Я знаю это.. Я пытался умножить на 1000, но отметка времени оказалась на самом деле 2018. Мне нужно было * 1000l, и все отлично работает. - person locrizak; 20.08.2012

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

Long _sLong = new Long(((long)_startTS)*1000);
person Jon Lin    schedule 20.08.2012