Класс OffsetDateTime
Класс OffsetDateTime представляет собой неизменяемую дату и время
с фиксированным смещением от UTC (например, +03:00 или -05:00).
Он объединяет в себе классы LocalDateTime и ZoneOffset.
В отличие от ZonedDateTime, который хранит информацию о часовом поясе
с учётом правил перехода на летнее время, OffsetDateTime хранит
только фиксированное смещение. Класс находится в пакете
java.time и был добавлен в Java 8.
Объекты OffsetDateTime создаются с помощью статических методов
now, of и parse. Класс предоставляет методы
для получения отдельных компонент: года, месяца, дня, часа, минуты,
секунды, наносекунды и смещения. Также доступны методы для
арифметических операций над датой и временем.
Синтаксис
OffsetDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond, offset)
OffsetDateTime.now()
OffsetDateTime.parse(text)
Пример
Давайте создадим объект OffsetDateTime с помощью метода of
и выведем его на экран:
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class Main
{
public static void main(String[] args)
{
OffsetDateTime odt = OffsetDateTime.of(
2025, 3, 15, 10, 30, 45, 0,
ZoneOffset.ofHours(3)
);
System.out.println(odt);
}
}
Результат выполнения кода:
"2025-03-15T10:30:45+03:00"
Пример
Давайте получим текущую дату и время со смещением с помощью метода
now:
import java.time.OffsetDateTime;
public class Main
{
public static void main(String[] args)
{
OffsetDateTime odt = OffsetDateTime.now();
System.out.println(odt);
}
}
Результат выполнения кода:
"2025-03-15T10:30:45.123+03:00"
Пример
Давайте разберём объект OffsetDateTime на отдельные компоненты
с помощью методов getYear, getMonthValue, getDayOfMonth,
getHour, getMinute и getOffset:
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class Main
{
public static void main(String[] args)
{
OffsetDateTime odt = OffsetDateTime.of(
2025, 3, 15, 10, 30, 45, 0,
ZoneOffset.ofHours(3)
);
System.out.println(odt.getYear());
System.out.println(odt.getMonthValue());
System.out.println(odt.getDayOfMonth());
System.out.println(odt.getHour());
System.out.println(odt.getMinute());
System.out.println(odt.getOffset());
}
}
Результат выполнения кода:
2025
3
15
10
30
"+03:00"
Пример
Давайте выполним арифметические операции над датой и временем
с помощью методов plusDays и minusHours:
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class Main
{
public static void main(String[] args)
{
OffsetDateTime odt = OffsetDateTime.of(
2025, 3, 15, 10, 30, 45, 0,
ZoneOffset.ofHours(3)
);
OffsetDateTime res = odt.plusDays(5).minusHours(2);
System.out.println(res);
}
}
Результат выполнения кода:
"2025-03-20T08:30:45+03:00"
Пример
Давайте преобразуем объект OffsetDateTime в другие типы
с помощью методов toLocalDateTime и toInstant:
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class Main
{
public static void main(String[] args)
{
OffsetDateTime odt = OffsetDateTime.of(
2025, 3, 15, 10, 30, 45, 0,
ZoneOffset.ofHours(3)
);
System.out.println(odt.toLocalDateTime());
System.out.println(odt.toInstant());
}
}
Результат выполнения кода:
"2025-03-15T10:30:45"
"2025-03-15T07:30:45Z"
Смотрите также
-
класс
ZonedDateTime,
который представляет дату и время с часовым поясом -
класс
LocalDateTime,
который представляет дату и время без смещения -
класс
ZoneId,
который представляет идентификатор часового пояса -
класс
DateTimeFormatter,
который форматирует и разбирает дату и время