Преобразование времени эпохи в строку даты - PullRequest
23 голосов
/ 18 марта 2012

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

У меня есть переменная длинного типа, в которой хранится время эпохи.То, что я хочу сделать, это преобразовать его в строку

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

Ответы [ 10 ]

32 голосов
/ 18 марта 2012

Просмотр SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.format(new Date(myTimeAsLong));
22 голосов
/ 18 марта 2012

Вы бы создали 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);
16 голосов
/ 24 июля 2014
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

2 голосов
/ 01 июля 2014

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.Но имейте в виду, что как минимум пара дюжин определений эпох используются различными компьютерными системами.

1 голос
/ 10 октября 2016

попробуйте

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);
0 голосов
/ 20 апреля 2019

ArLiteDTMConv Утилита, помогающая преобразовать значения даты-времени EPOUCH-UNIX, формы EPOUCH-UNIX-To-Date-format и Vise-Versa. Вы можете установить результат в переменную, а затем использовать переменную в своем скрипте или при передаче в качестве параметра или ввести в любые критерии БД как для Window, так и для Linux. (Скачать почтовый файл по этой ссылке)

0 голосов
/ 13 февраля 2019

Время для того, чтобы кто-то дал современный ответ (действительный и рекомендуемый с 2014 года).

java.time

    DateTimeFormatter formatter = DateTimeFormatter
            .ofLocalizedDateTime(FormatStyle.LONG).withLocale(Locale.US);

    String facebookTime = "1548410106047";
    long fbt = Long.parseLong(facebookTime);
    ZonedDateTime dateTime = Instant.ofEpochMilli(fbt).atZone(ZoneId.of("America/Indiana/Knox"));
    System.out.println(dateTime.format(formatter));

Вывод:

25 января 2019 года в 3:55:06 CST

Если вам нужна только дата и в более коротком формате, используйте, например,

    DateTimeFormatter formatter = DateTimeFormatter
            .ofLocalizedDate(FormatStyle.SHORT).withLocale(Locale.US);

1 /25/19

Обратите внимание, что во фрагменте можно указать часовой пояс, язык (локаль) и длительность или короткость нужного формата.

Ссылки

0 голосов
/ 21 марта 2016

на основе предыдущих ответов при прохождении системных значений по умолчанию 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));
}
0 голосов
/ 28 октября 2014

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

образец Отметка времени эпохи 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

Счастливое кодирование

0 голосов
/ 18 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...