Вопрос по java, jodatime – Преобразование метки времени Unix в строку с Joda Time

25

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

Ваш Ответ

3   ответа
3

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

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

Штамп времени Unix - это числоSECONDS поскольку1970-01-01 00:00:00.

DateTime(long instant) конструктор нуждается в количествеMILLISECONDS.

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

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

Я знаю, что .. Я пытался умножить на 1000, но отметка времени фактически оказалась 2018. Мне нужно было* 1000l и все отлично работает. locrizak
53

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

Вам нужно будет умножить его на 1000

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

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

Ред. Вы должны использовать заглавные буквы "L" на долго. Намного более читаемый.
Отлично работает, красиво! locrizak

Похожие вопросы