Подтвердить что ты не робот

Преобразование Epoch секунд в формат даты и времени в Java

У меня есть секунды с 1970 года январь 1 UTC (время в эпоху).

1320105600

Мне нужно преобразовать эти секунды в дату и время в нижнем формате.

Friday,November 4,2011 5:00,AM

Как я могу это достичь?

4b9b3361

Ответ 1

Если вы ограничены устаревшими API java.util.Date и java.util.Calendar, вам необходимо учесть, что временные метки интерпретируются в миллисекундах, а не секундах. Поэтому вам сначала нужно умножить его на 1000, чтобы получить метку времени в миллисекундах.

long seconds = 1320105600;
long millis = seconds * 1000;

Таким образом вы можете подать его на a.o. конструктор java.util.Date и, наконец, используйте SimpleDateFormat для преобразования java.util.Date в java.lang.String в желаемом формате формата даты, если необходимо, с предопределенным часовым поясом (в противном случае он будет использовать системный часовой пояс по умолчанию, который не является GMT/UTC как таковым, и, следовательно, отформатированное время может быть отключено).

Date date = new Date(millis);
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String formattedDate = sdf.format(date);
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM

Если вы уже на Java8, там LocalDateTime#ofEpochSecond(), который позволяет вам напрямую питать секунды эпохи без необходимости умножения на миллисекундный вкус.

LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH);
String formattedDate = dateTime.format(formatter);
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM

Ответ 2

long yourSeconds = 1320105600L;
Date d = new Date(yourSeconds * 1000);

Смотрите этот Javadoc для получения дополнительной информации. Конструктор требует миллисекунд.

Чтобы отобразить эту дату в соответствующем формате, вы должны проверить DateFormat

Вот пример:

DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm:ss zzz");
System.out.println(df.format(date));

Ответ 3

java.time

Ответ от BalusC хорош тем, что указывает на использование java.time. Но этот ответ использует LocalDateTime где более подходящим является Instant. LocalDateTime не является моментом на временной шкале, поскольку он намеренно не имеет понятия смещения от UTC или часового пояса.

java.time

Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют старые проблемные классы даты и времени, такие как java.util.Date, .Calendar, и java.text.SimpleDateFormat. Команда Joda-Time также советует перейти на java.time.

Чтобы узнать больше, смотрите Oracle Tutorial. И поиск для многих примеров и объяснений.

Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport и дополнительно адаптирована для Android в ThreeTenABP.

Instant

Момент на временной шкале в UTC с разрешением до наносекунд представлен классом Instant.

Instant instant = Instant.ofEpochSecond ( 1_320_105_600L );

Дамп на консоль. Ваше введенное значение - первый момент 1 ноября 2011 года в UTC. Буква Z в конце, сокращение от "Зулу", означает UTC.

System.out.println ( "instant: " + instant );

мгновенный: 2011-11-01T00: 00: 00Z

ZonedDateTime

В ваших комментариях вы упоминаете о желании увидеть эту дату-время через призму часового пояса America/Chicago. Используйте правильное название часового пояса. Примените часовой пояс ZoneId, чтобы получить объект ZonedDateTime. Мы видим, что в этот день Чикаго отстает от UTC на пять часов.

ZoneId zoneId = ZoneId.of ( "America/Chicago" );
ZonedDateTime zdt = instant.atZone ( zoneId );

zdt: 2011-10-31T19: 00-05: 00 [Америка/Чикаго]

Струны

Вышеуказанные строки представлены в стандартном формате ISO 8601. Для генерации строк в других форматах используйте класс DateTimeFormatter. Вы можете указать свой собственный шаблон. Но, как правило, лучше всего позволить java.time автоматически локализоваться на человеческий язык и культурные нормы, закодированные в объекте Locale.

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL );
formatter = formatter.withLocale ( Locale.US );
String output = zdt.format ( formatter );

Понедельник, 31 октября 2011 г., 7:00:00 CDT

Чтобы указать свой собственный формат, выполните поиск Stack Overflow, чтобы найти множество примеров и подробное обсуждение.

Ответ 4

int seconds = 1320105600;
Date date = new Date(seconds * 1000);
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a");
System.out.println(sdf.format(date));

Ответ 5

Фокус в том, чтобы использовать java.util.Date и java.text.DateFormat, чтобы получить желаемый формат. Вы можете посмотреть, как это сделать в учебниках в Интернете.