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