Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: locrizakОтветов: 3

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

javajodatime

Ответы

Ответ 1 · рейтинг 63 · MadProgrammer

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

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

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

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

Ответ 2 · рейтинг 5 · Strelok

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

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

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

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

Ответ 3 · рейтинг 3 · Jon Lin

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы