Класс ZonedDateTime
Класс ZonedDateTime из пакета java.time представляет
собой неизменяемый объект, который хранит дату, время и часовой
пояс. В отличие от LocalDateTime, класс ZonedDateTime
содержит информацию о зоне (например, Europe/Paris) и смещении
относительно UTC, что позволяет корректно работать с моментами
времени в разных регионах мира, учитывая переходы на летнее время.
Объекты класса создаются с помощью статических методов now,
of и parse. Класс реализует интерфейсы Temporal,
ChronoZonedDateTime и Serializable.
Синтаксис
ZonedDateTime.now()
ZonedDateTime.now(ZoneId zone)
ZonedDateTime.of(year, month, day, hour, minute, second, nano, zone)
ZonedDateTime.parse(text)
Пример
Давайте получим текущую дату и время в системном часовом поясе:
import java.time.ZonedDateTime;
public class Main
{
public static void main(String[] args)
{
ZonedDateTime now = ZonedDateTime.now();
System.out.println(now);
}
}
Результат выполнения кода:
2024-03-15T14:30:45.123+03:00[Europe/Moscow]
Пример
Давайте получим текущую дату и время в конкретном часовом поясе:
import java.time.ZonedDateTime;
import java.time.ZoneId;
public class Main
{
public static void main(String[] args)
{
ZoneId zone = ZoneId.of("America/New_York");
ZonedDateTime now = ZonedDateTime.now(zone);
System.out.println(now);
}
}
Результат выполнения кода:
2024-03-15T07:30:45.123-04:00[America/New_York]
Пример
Давайте создадим объект ZonedDateTime с помощью метода
of, передав год, месяц, день, часы, минуты, секунды
и часовой пояс:
import java.time.ZonedDateTime;
import java.time.ZoneId;
public class Main
{
public static void main(String[] args)
{
ZoneId zone = ZoneId.of("Europe/Paris");
ZonedDateTime dateTime = ZonedDateTime.of(2024, 6, 15, 12, 30, 0, 0, zone);
System.out.println(dateTime);
}
}
Результат выполнения кода:
2024-06-15T12:30+02:00[Europe/Paris]
Пример
Давайте разберём строку в объект ZonedDateTime с помощью
метода parse:
import java.time.ZonedDateTime;
public class Main
{
public static void main(String[] args)
{
ZonedDateTime dateTime = ZonedDateTime.parse("2024-06-15T12:30:00+02:00[Europe/Paris]");
System.out.println(dateTime);
}
}
Результат выполнения кода:
2024-06-15T12:30+02:00[Europe/Paris]
Пример
Давайте получим отдельные компоненты даты и времени из объекта
ZonedDateTime:
import java.time.ZonedDateTime;
public class Main
{
public static void main(String[] args)
{
ZonedDateTime dateTime = ZonedDateTime.parse("2024-06-15T12:30:45+02:00[Europe/Paris]");
System.out.println(dateTime.getYear());
System.out.println(dateTime.getMonthValue());
System.out.println(dateTime.getDayOfMonth());
System.out.println(dateTime.getHour());
System.out.println(dateTime.getMinute());
System.out.println(dateTime.getSecond());
System.out.println(dateTime.getZone());
}
}
Результат выполнения кода:
2024
6
15
12
30
45
Europe/Paris
Пример
Давайте преобразуем момент времени из одного часового пояса
в другой с помощью метода withZoneSameInstant:
import java.time.ZonedDateTime;
import java.time.ZoneId;
public class Main
{
public static void main(String[] args)
{
ZonedDateTime paris = ZonedDateTime.parse("2024-06-15T12:30:00+02:00[Europe/Paris]");
ZonedDateTime tokyo = paris.withZoneSameInstant(ZoneId.of("Asia/Tokyo"));
System.out.println(paris);
System.out.println(tokyo);
}
}
Результат выполнения кода:
2024-06-15T12:30+02:00[Europe/Paris]
2024-06-15T19:30+09:00[Asia/Tokyo]
Пример
Давайте преобразуем объект ZonedDateTime в
LocalDateTime и Instant:
import java.time.ZonedDateTime;
import java.time.LocalDateTime;
import java.time.Instant;
public class Main
{
public static void main(String[] args)
{
ZonedDateTime dateTime = ZonedDateTime.parse("2024-06-15T12:30:00+02:00[Europe/Paris]");
LocalDateTime local = dateTime.toLocalDateTime();
Instant instant = dateTime.toInstant();
System.out.println(local);
System.out.println(instant);
}
}
Результат выполнения кода:
2024-06-15T12:30
2024-06-15T10:30:00Z
Смотрите также
-
класс
ZonedDateTime,
который представляет дату и время с часовым поясом -
метод
now,
который возвращает текущую дату и время с поясом -
метод
of,
который создаёт объект из компонентов даты и времени -
метод
parse,
который разбирает строку в объект ZonedDateTime