2012-03-17 3 views
16

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

У меня есть длинная переменная типа, которая хранит в ней время.

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

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

17/03/2012

Как я к этому?

ответ

26

Посмотрите в SimpleDateFormat

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

Ive получил это, чтобы распечатать строку в правильном формате, но распечатывает неверную дату, которую она дает сегодня, как 16/00/1970. Длинные использовались 1332026487. – nexus490

+0

Это потому, что вам, возможно, придется поиграть с параметром, который вы передаете в конструкторе. Вы можете найти все возможности отображения в Jav API – Reinard

+4

Этот ответ: печатает * минута * вместо * месяца *; игнорирует выбор культуры (что очень важно); игнорирует выбор часового пояса (что невероятно важно). Вы действительно должны думать об этих вещах - это не помощь (ИМО), чтобы просто игнорировать их. –

20

Вы хотите создать 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); 
+0

Что бы я поставил для аргумента Timezone? – nexus490

+0

@ nexus490: Ну, в какой часовой пояс вы хотите представить значение? Например, через час это будет 18/03/2012 в * моем * часовом поясе, но в США все равно будет 17/03/2012 за то же количество миллисекунд с эпохи. Каким будет правильный ответ? Это то, что вы * знаете, поскольку знаете свои требования к приложениям (надеюсь). Может быть, вы хотите UTC. Возможно, вам нужен локальный часовой пояс системы. Возможно, вы хотите часовой пояс пользователя. –

+0

Благодарим за это: «Если у вас есть ** секунд ** с эпохи, умножьте на ** 1000 **». – Metallica

0

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

+0

И зачем мне конвертировать миллисекунды в миллисекунды? –

+0

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

2

Joda времени

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

11
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

+3

Просто небольшой комментарий, вам нужно изменить HH: MM: ss.SSS на HH: mm: ss.SSS - ММ - это месяц, а не минуты. – Leo

+0

спасибо Damith: D –

0

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

образца Epoch временная отметка 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 вечера

Днем кодирования

+1

3 проблемы с этим ответом. Этот ответ игнорирует решающую проблему часового пояса. Этот ответ использует другой формат, чем запрошен в Вопросе. И этот ответ по существу дублирует три других ответа, опубликованных несколько месяцев назад. Я не вижу никакой добавленной стоимости. –

0

на основании предыдущих ответов, во время прохождения системы по умолчанию 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

попробовать это

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);