Преобразование времени unix/epoch в отформатированную дату - непредвиденная дата

Я пытаюсь преобразовать метку времени в удобочитаемую дату и время. Я старался:

String dateSt = 1386580621268;
Log.i("*****", "date st is = "+dateSt);
long unixSeconds = Long.parseLong(dateSt);
Log.i("*******", "unix seconds is = "+unixSeconds);
Date date = new Date(unixSeconds*1000L); // *1000 is to convert seconds to milliseconds
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); // the format of your date
String formattedDate = sdf.format(date);
System.out.println(formattedDate);

Ожидаемый результат должен быть 09-12-2013, однако я получаю 28-12-45908. Приведенный выше пример можно найти по адресу: Преобразование временной метки Unix в дату java, ответ Дэвид Хофманн


person DevC    schedule 18.12.2013    source источник


Ответы (3)


1386580621268 - это не временная метка unix, т.е. секунды с начала эпохи для 9-12-2013, а миллисекунды с начала эпохи. Удалите *1000L или разделите ввод на 1000.

person laalto    schedule 18.12.2013
comment
Ах, я вижу, большое спасибо за прояснение этого. Теперь все работает правильно :) Я только что удалил *1000L, как вы предложили. Спасибо еще раз. - person DevC; 18.12.2013

Попробуй это,

public static String Epoch2DateString(long epochSeconds, String formatString) {
    Date updatedate = new Date(epochSeconds * 1000);
    SimpleDateFormat format = new SimpleDateFormat(formatString);
    return format.format(updatedate);
}
person No_Rulz    schedule 18.12.2013

Я решил так.

public static String Epoch2DateString(String epochSeconds) {
    Date updatedate = new Date(Integer.parseInt(epochSeconds) * 1000L);
    SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
    return format.format(updatedate);
}
person Hasan Batuhan Kurt    schedule 15.05.2019