У меня есть секунды с 1 января 1970 года по всемирному координированному времени (время эпохи).
1320105600
Мне нужно преобразовать эти секунды в дату и время в формате ниже.
Friday,November 4,2011 5:00,AM
Как я могу этого добиться?
У меня есть секунды с 1 января 1970 года по всемирному координированному времени (время эпохи).
1320105600
Мне нужно преобразовать эти секунды в дату и время в формате ниже.
Friday,November 4,2011 5:00,AM
Как я могу этого добиться?
Если вы ограничены устаревшими API java.util.Date
и java.util.Calendar
, вам необходимо принять во внимание, что временные метки интерпретируются в миллисекундах, а не в секундах. Поэтому сначала нужно умножить его на 1000, чтобы получить отметку времени в миллисекундах.
long seconds = 1320105600;
long millis = seconds * 1000;
Таким образом, вы можете скормить его а.о. конструктор 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, есть _ 9_, который позволяет вводить секунды эпохи напрямую без необходимости умножения на миллисекунды.
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
CST
в качестве часового пояса и calendar.set(2011, Calendar.OCTOBER, 31, 19, 0);
. Вы получите ровно 1320105600
.
- person BalusC; 25.11.2011
long yourSeconds = 1320105600L;
Date date = 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
, где _ 2_ более уместно. LocalDateTime
не em> момент на временной шкале, поскольку он намеренно не имеет понятия о смещении от-UTC или часовой пояс.
Создана структура java.time в Java 8 и новее. Эти классы вытесняют старые неприятные классы даты и времени, такие как java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
. Команда Joda-Time также советует перейти на java.time.
Чтобы узнать больше, см. Учебник Oracle. И поищите в Stack Overflow множество примеров и объяснений.
Большая часть функций java.time перенесена на Java 6 и 7 в ThreeTen-Backport и более поздних версиях. адаптирован для Android в ThreeTenABP.
Instant
Момент на временной шкале в UTC с разрешением до наносекунды представлены _ 8_ класс.
Instant instant = Instant.ofEpochSecond ( 1_320_105_600L );
Выгрузить в консоль. Введенное значение - первый момент 1 ноября 2011 г. в UTC. Z
на конце, сокращение от «Zulu», означает всемирное координированное время.
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
< / a> класс. Вы можете указать свой собственный шаблон. Но обычно лучше позволить java.time автоматически локализоваться для человеческого языка и культурных норм, закодированных в _ 18_.
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL );
formatter = formatter.withLocale ( Locale.US );
String output = zdt.format ( formatter );
31 октября 2011 г. 19:00:00 CDT
Чтобы указать свой собственный формат, поищите в Stack Overflow множество примеров и другие обсуждения.
Уловка состоит в том, чтобы использовать java.util.Date
и java.text.DateFormat
, чтобы получить нужный формат. Вы можете узнать, как это сделать, в руководствах в Интернете.