2012-03-10 8 views
1

Мне нужно преобразовать некоторые временные метки эпохи в настоящую дату и использовать некоторые из методов, которые я нашел при переполнении стека, но они дают неверный ответ.Java - конвертировать эпоху Unix на сегодняшний день

В качестве примера, одна дата «129732384262470907» во времени эпохи, которая является «пн, 20 января 6081 5:24:22 GMT» с помощью http://www.epochconverter.com/

Однако мой код генерирует: «Ср 24 декабря 14 : 54: 05 CST 19179225"

String epochString = token.substring(0, comma); 
    long epoch = Long.parseLong(epochString); 
    Date logdate = new Date(epoch * 1000); 
    BufferedWriter timewrite = new BufferedWriter(new FileWriter(tempfile, true)); 
    timewrite.write(logdate); 
    timewrite.flush(); 
    timewrite.close(); 

начальная метка времени в миллисекундах, что в примерах, которые я видел здесь, я должен умножить на 1000.

Если я не умножать на 1000, я получить: «Пн авг 08 01:14:30 CDT 4113025»

Оба они ошибаются.

Итак, где я сделал свою ошибку?

ответ

2

129732384262470907 фактически в микросекунд с эпохи, если она предназначается, чтобы быть 6081, так что вам нужно разделить на 1000, если это реальный вход.

Обратите внимание, что epochconverter.com даже не обрабатывать это значение - оно только позволяет ввести 129732384262470 который затем обрабатывает как миллисекунд с эпохи.

Вам необходимо увеличить на 1000, если ваши данные являются секунд с эпохи. В основном все, что вам нужно знать, это то, что Java ожидает миллисекунды с эпохи; остальное должно быть плавным, предполагая, что вы знаете, что на самом деле означает ваши входные данные.

Если вы можете предоставить свои реальные данные и что они предназначены для представления, вероятно, будет легко исправить ваши проблемы.

+0

И вы потрясающий! –

+0

Спасибо за отзыв о epochconveter.com Я бы никогда не подумал об этом сам. И, как вы можете видеть из моего сообщения ниже, между вашими двумя ответами, я смог понять это. –

0

Если вы внимательно посмотрите, epochconverter.com усекает это число, потому что он слишком длинный для поля ввода.

Предлагаю вам напечатать текущее значение System.currentMillis(), чтобы узнать, какой приблизительный диапазон имеет «текущая» временная метка на основе эпохи, и повторно масштабировать введенный вами номер. Думаю, вам, вероятно, придется разделить на 1000.

На самом деле, если вы поделитесь на 10 000, вы получите 1297323842624, который выходит на свидание в 2011 году. Поэтому совершенно не ясно, номер, который вы указали, находится в.

+0

И ты потрясающий !! Это одно изменение заставило его работать правильно. Еще раз спасибо, и вы правы, что epochconverter.com дал неправильное значение в реальном времени - «Sun Jan 19 23:24:22 CST 6081» –

+0

Действительно? Вы ожидаете 6081 год? – dty

+0

Конечно, я путешественник во времени. Мне просто нужно вернуться к 6081 году, и доступные примитивные системы очень расстраивают. [/ joke] Извините, вставьте неправильный, правильный: «Thu Feb 10 01:44:02 CST 2011« Мне пришлось разделить на 100 000 –

Смежные вопросы