Преобразование строки Epoch time в date

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

У меня есть переменная long type, в которой хранится время эпохи.

то, что я хочу сделать, это преобразовать его в строку

например, если время эпохи сохранено на сегодня, последняя строка будет читать:

17/03/2012

Как бы я к этому?

8 ответов


посмотреть в SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.format(new Date(myTimeAsLong));

вы бы создали Date С long - это просто:

Date date = new Date(epochTime);

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

тогда вы создадите SimpleDateFormat указание соответствующего шаблона, культуры и часового пояса. Например:

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.US);
format.setTimeZone(...);

затем использовать для форматирования даты в строку:

String text = format.format(date);

Date date = new Date(String); 

это не рекомендуется.

решение

  Date date = new Date(1406178443 * 1000L);
  DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
  format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
  String formatted = format.format(date);

убедитесь, что умножить на 1000L


Joda-Time

Если под эпохальным временем вы подразумевали количество миллисекунд с первого момента 1970 года в UTC, то вот пример кода с использованием библиотеки Joda-Time...

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime dateTime = new DateTime( yourMilliseconds, timeZone );
String output = DateTimeFormat.forStyle( "S-" ).withLocale( Locale.CANADA_FRENCH ).print( dateTime );

Других Эпох

это определение эпохи распространено из-за его использования в Unix. Но имейте в виду, что по крайней мере a пару десятков эпох определения используются различными компьютерными системами.


вы должны знать, что время эпохи в java находится в миллисекундах, в то время как то, что вы конвертируете, может быть в секундах. Убедитесь, что обе стороны преобразований находятся в миллисекундах, а затем можно извлечь параметры даты из объекта Date.


попробуйте это...

временная метка эпохи образца 1414492391238

способ:

public static String GetHumanReadableDate(long epochSec, String dateFormatStr) {
    Date date = new Date(epochSec * 1000);
    SimpleDateFormat format = new SimpleDateFormat(dateFormatStr,
            Locale.getDefault());
    return format.format(date);
}

удобство:

long timestamp = Long.parseLong(engTime) / 1000;
String engTime_ = GetHumanReadableDate(timestamp, "dd-MM-yyyy HH:mm:ss aa");

результат:

28-10-2014 16:03:11 часов

удачи в кодировании


на основе предыдущих ответов, при прохождении системы по умолчанию Locale и TimeZone...

String epochToIso8601(long time) {
    String format = "yyyy-MM-dd HH:mm:ss";
    SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
    sdf.setTimeZone(TimeZone.getDefault());
    return sdf.format(new Date(time * 1000));
}

попробуй такое

Date date = new Date(1476126532838L);
DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
String formatted = format.format(date);
format.setTimeZone(TimeZone.getTimeZone("Asia/Colombo"));//your zone
formatted = format.format(date);
System.out.println(formatted);