У меня есть секунды с 1970 года январь 1 UTC (время в эпоху).
1320105600
Мне нужно преобразовать эти секунды в дату и время в нижнем формате.
Friday,November 4,2011 5:00,AM
Как я могу это достичь?
У меня есть секунды с 1970 года январь 1 UTC (время в эпоху).
1320105600
Мне нужно преобразовать эти секунды в дату и время в нижнем формате.
Friday,November 4,2011 5:00,AM
Как я могу это достичь?
Если вы ограничены устаревшими 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
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));
Ответ от BalusC хорош тем, что указывает на использование java.time. Но этот ответ использует LocalDateTime
где более подходящим является Instant
. LocalDateTime
не является моментом на временной шкале, поскольку он намеренно не имеет понятия смещения от UTC или часового пояса.
Инфраструктура 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, чтобы найти множество примеров и подробное обсуждение.
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));
Фокус в том, чтобы использовать java.util.Date
и java.text.DateFormat
, чтобы получить желаемый формат. Вы можете посмотреть, как это сделать в учебниках в Интернете.