ТЛ; др
Instant.now()
java.time
Класс java.util.Date был устаревшим новым пакетом java.time ( Tutorial ) в Java 8 и более поздних версиях. Старые классы java.util.Date/.Calendar общеизвестно хлопотны, сбивают с толку и имеют недостатки. Избегайте их.
ZonedDateTime
Получить текущий момент в java.time.
ZonedDateTime now = ZonedDateTime.now();
A ZonedDateTime
инкапсулирует:
- Дата.
- Время суток, с долей секунды до наносекунды разрешение.
- Часовой пояс.
Если часовой пояс не указан, текущий часовой пояс по умолчанию для вашей JVM назначается автоматически. Лучше указать желаемый / ожидаемый часовой пояс, чем неявно полагаться по умолчанию.
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
UTC
Как правило, лучше привыкнуть к выполнению серверной работы (бизнес-логика, база данных, хранение, обмен данными) в часовом поясе UTC . Приведенный выше код неявно опирается на текущий часовой пояс JVM по умолчанию.
Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд.
Instant instant = Instant.now();
Класс Instant
является базовым классом строительных блоков в java.time и может часто использоваться в вашем коде.
Если вам нужно больше гибкости при форматировании, преобразуйте в OffsetDateTime
. Укажите объект ZoneOffset
. Для UTC используйте удобную константу для UTC .
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
Часовой пояс
Вы можете легко настроить другой часовой пояс для представления пользователю. Используйте правильное имя часового пояса , , никогда 3-4-буквенные коды, такие как EST
или IST
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
Создать строковое представление этого значения даты и времени, локализованное.
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
Или, чтобы остаться в UTC, используйте Instant
. Объект Instant
представляет момент на временной шкале с точностью до наносекунды, всегда в формате UTC. Это обеспечивает строительный блок для зонированной даты и времени, а также назначение часового пояса. Вы можете думать об этом концептуально так:
ZonedDateTime
= Instant
+ ZoneId
Вы можете извлечь Instant
из ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Вы можете начать с мгновенного. Здесь нет необходимости указывать часовой пояс, так как Instant
всегда в UTC.
Instant now = Instant.now();