2013-07-02 3 views
37

Как преобразовать минуты с отметки времени unix в дату и время в java. Например, отметка времени 1372339860 соответствует Thu, 27 Jun 2013 13:31:00 GMT.Преобразование метки времени unix на сегодняшний день в java

Я хочу преобразовать 1372339860 в 2013-06-27 13:31:00 GMT.

Редактировать: На самом деле, я хочу, чтобы это было в соответствии с временем США GMT-4, поэтому это будет 2013-06-27 09:31:00.

+0

'DateTime независимо = новый DateTime (yourunixtimestampaslong * 1000L, DateTimeZone.UTC)', если вы используете [JodaTime] (HTTP://joda-time.sourceforge.net/). Или 'DateTime whatever = new DateTime (yourunixtimestampaslong * 1000L, DateTimeZone.forOffsetHours (-4));' для вашего второго примера. Javadoc [здесь] (http://joda-time.sourceforge.net/apidocs/index.html) – fvu

+0

Формат SimpleDateFormat = новый SimpleDateFormat («dd-MM-yyyy HH: mm: ss»); –

ответ

115

Вы можете использовать SimlpeDateFormat для форматирования даты, как это:

long unixSeconds = 1372339860; 
// convert seconds to milliseconds 
Date date = new Date(unixSeconds*1000L); 
// the format of your date 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); 
// give a timezone reference for formatting (see comment at the bottom) 
sdf.setTimeZone(TimeZone.getTimeZone("GMT-4")); 
String formattedDate = sdf.format(date); 
System.out.println(formattedDate); 

Шаблон, SimpleDateFormat принимает, если очень гибкий, вы можете проверить в javadocs все варианты, которые вы можете использовать для создания различного форматирования на основе шаблонов, которые вы пишете, с учетом конкретных Date. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

  • Поскольку Date обеспечивает getTime() метод, который возвращает миллисекунды с момента EPOC, требуется, чтобы вы даете SimpleDateFormat часовой пояс для форматирования даты правильно acording в ваш часовой пояс, в противном случае он будет использовать часовой пояс по умолчанию из виртуальная машина Java (который, если хорошо настроен будет в любом случае быть правами)
+0

Изменено, спасибо @fvu –

+2

Этот ответ лучше, потому что автор также дает пример того, как соблюдать часовые пояса. – drdrej

+1

Отлично! Btw для получения текущего часового пояса устройства мы можем использовать 'TimeZone.getDefault()' – Atul

10

Вы должны преобразовать его в миллисекундах путем умножения метки на 1000:

java.util.Date dateTime=new java.util.Date((long)timeStamp*1000); 
+0

Обратите внимание, что вопрос заключается в том, чтобы преобразовать минуты эпохи на сегодняшний день, а затем сформировать его по шаблону с смещением часового пояса –

26

Java-8 представляет метод Instant.ofEpochSecond утилита для создания Instant с метки времени Unix, это может быть затем превращено в ZonedDateTime и, наконец, отформатированных, например:

final DateTimeFormatter formatter = 
    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 

final long unixTime = 1372339860; 
final String formattedDtm = Instant.ofEpochSecond(unixTime) 
     .atZone(ZoneId.of("GMT-4")) 
     .format(formatter); 

System.out.println(formattedDtm); // => '2013-06-27 09:31:00' 

Я думал, что это может быть полезно для людей, которые используют Java 8.

+0

Большая часть функциональность java.time была перенесена на Java 6 и 7 в [ThreeTen-Backport] (http://www.threeten.org/threetenbp/) и далее адаптирована к [Android] (https: //en.wikipedia. org/wiki/Android_ (operating_system)) в [ThreeTenABP] (https://github.com/JakeWharton/ThreeTenABP) (см. [* Как использовать ... *] (http://stackoverflow.com/q/38922754/642706)). –

+0

Ваш пример смещения от UTC ('GMT-4') более подходит для [' OffsetDateTime'] (https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime .html), чем 'ZonedDateTime'. Кроме того, я предлагаю вам разбить свой примерный код на части, чтобы каждый шаг и каждая идея представлялись отдельно. –