DateTime API - это набор классов и методов в языке программирования, который позволяет работать с датами и временем. Он предоставляет различные функции для работы с датами, такие как создание, сравнение, форматирование и манипуляция.
В DateTime API входят следующие основные классы:
1. LocalDate - представляет только дату без времени.
2. LocalTime - представляет только время без даты.
3. LocalDateTime - представляет комбинацию даты и времени.
4. ZonedDateTime - представляет дату и время в определенном часовом поясе.
5. Period - представляет период времени между двумя датами.
6. Duration - представляет продолжительность времени между двумя моментами времени.
- Unix-время используется для хранения времени в Java.
- Unix-эпоха - 1 января 1970 года, 00:00:00 по Гринвичскому времени.
- GMT и UTC - два основных стандарта измерения времени.
- Unix-время соответствует времени UTC без смещения.
- Метка времени - универсальный способ описания момента во времени.
===>>> Класс Instant (java.time.Instant)
хранит количество миллисекунд от Unix-эпохи.
- Метод now() чтобы получить текущую метку времени:
Instant currentTimestamp = Instant.now();
В момент вызова метода now() создаётся экземпляр класса Instant, в котором будет храниться количество милли- и наносекунд Unix-времени.
- Метод toString() если у экземпляра Instant вызвать метод toString() (например, передав экземпляр в System.out.println()), то дата и время будут выведены в формате ISO-8601: год-месяц-день T часы:минуты:секунды Z. Например, 12:45:50.123456 23 ноября 2021 года будет выглядеть как 2021-11-23T12:45:50.123456Z:
- Метод toEpochMilli()
Посчитать количество миллисекунд с Unix-эпохи до конкретной метки времени можно с помощью метода toEpochMilli():
Instant currentTimestamp = Instant.now();
long milliseconds = currentTimestamp.toEpochMilli();
!!! Работа с экземплярами класса Instant
Экземпляры класса Instant — неизменямые. Это значит, что у уже существующего экземпляра нельзя поменять время: например, перевести его на час вперёд. Однако можно воспользоваться специальными методами для создания нового экземпляра на основе старого, но с другим временем:
- plusSeconds(long secondsToAdd) — создаёт экземпляр класса Instant, который будет отличаться от текущего на secondsToAdd секунд в бóльшую сторону;
- plusMillis(long millisToAdd) — на millisToAdd миллисекунд в бóльшую сторону;
- plusNanos(long nanosToAdd) — на nanosToAdd наносекунд в бóльшую сторону.
Аналогичные методы, но с изменениями в меньшую сторону:
- minusSeconds(long secondsToSubtract) — на secondsToSubtract секунд;
- minusMillis(long millisToSubtract) — на millisToSubtract миллисекунд;
- minusNanos(long nanosToSubtract) — на nanosToSubtract наносекунд.
===>>> Классы LocalDateTime, LocalDate и LocalTime
==>> Класс LocalDateTime
входит в DateTime API в языке программирования Java и представляет собой дату и время без учета часового пояса. Он может быть использован для работы с локальными датами и временами, такими как дата рождения, праздники, встречи и т. д.
Класс LocalDateTime содержит информацию о годе, месяце, дне, часе, минуте, секунде и миллисекунде. Он предоставляет методы для работы с этой информацией, такие как получение отдельных компонентов даты и времени, добавление или вычитание определенного количества времени, сравнение с другими датами и временами, форматирование вывода и многое другое.
Одно из преимуществ класса LocalDateTime заключается в том, что он не зависит от часового пояса, поэтому он может быть использован для представления локальных дат и времен независимо от местоположения. Однако при необходимости работы с часовыми поясами или мировым временем (UTC), можно легко преобразовать LocalDateTime в другие типы данных, такие как ZonedDateTime или Instant.
// Создание объекта LocalDateTime
LocalDateTime now = LocalDateTime.now(); // текущая локальная дата и время
// Получение компонентов даты и времени
int year = now.getYear();
Month month = now.getMonth();
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
// Добавление или вычитание времени
LocalDateTime futureDate = now.plusDays(7);
LocalDateTime pastDate = now.minusHours(3);
// Сравнение с другими датами и временами
LocalDateTime otherDate = LocalDateTime.of(2022, Month.JANUARY, 1, 12, 0);
boolean isAfter = now.isAfter(otherDate);
// Форматирование вывода
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDate = now.format(formatter);
Некоторые основные методы класса LocalDateTime включают:
1. now() - создает объект LocalDateTime, представляющий текущую локальную дату и время.
2. getYear(), getMonth(), getDayOfMonth(), getHour(), getMinute(), getSecond() - возвращают соответствующие компоненты даты и времени.
3. plusDays(long daysToAdd), plusHours(long hoursToAdd), minusDays(long daysToSubtract), minusHours(long hoursToSubtract) - добавляют или вычитают указанное количество дней или часов к текущей дате и времени.
4. isAfter(LocalDateTime otherDateTime), isBefore(LocalDateTime otherDateTime) - сравнивают текущую дату и время с другими датами и временами.
5. format(DateTimeFormatter formatter) - форматирует текущую дату и время в соответствии с заданным шаблоном.
6. atZone(ZoneId zone) - преобразует LocalDateTime в ZonedDateTime для указанного часового пояса.
7. toLocalDate(), toLocalTime() - возвращает только дату или только время из текущего LocalDateTime.
8. with(TemporalAdjuster adjuster) - применяет указанный TemporalAdjuster к текущему LocalDateTime, например, для нахождения следующего рабочего дня или последнего дня месяца.
==>> LocalDateTime = LocalDate + LocalTime
- LocalDate оперирует годом, месяцем и днём;
- LocalTime — часами, минутами, секундами и наносекундами.
Некоторые основные методы класса LocalDate:
1. int getYear() - возвращает год даты.
2. Month getMonth() - возвращает месяц даты в виде объекта перечисления Month.
3. int getDayOfMonth() - возвращает день месяца.
4. DayOfWeek getDayOfWeek() - возвращает день недели в виде объекта перечисления DayOfWeek.
5. LocalDate plusDays(long daysToAdd) - добавляет указанное количество дней к дате.
6. LocalDate minusMonths(long monthsToSubtract) - вычитает указанное количество месяцев из даты.
7. boolean isAfter(LocalDate otherDate) - возвращает true, если данная дата идет после указанной даты.
8. String format(DateTimeFormatter formatter) - форматирует дату в строку с помощью указанного форматтера.
Некоторые основные методы класса LocalTime:
1. int getHour() - возвращает час времени.
2. int getMinute() - возвращает минуту времени.
3. int getSecond() - возвращает секунду времени.
4. LocalTime plusHours(long hoursToAdd) - добавляет указанное количество часов к времени.
5. LocalTime minusMinutes(long minutesToSubtract) - вычитает указанное количество минут из времени.
6. boolean isBefore(LocalTime otherTime) - возвращает true, если данное время идет до указанного времени.
7. String format(DateTimeFormatter formatter) - форматирует время в строку с помощью указанного форматтера.
===>>> Классы Period и Duration
являются частью пакета java.time, предназначенного для работы с датами и временем в Java.
==>> Класс Period
представляет собой период времени, например, количество лет, месяцев и дней. Он может быть использован для вычисления разницы между двумя датами или для добавления/вычитания определенного количества времени к дате.
Основные методы класса Period:
1. static Period of(int years, int months, int days) - создает экземпляр класса Period с указанным количеством лет, месяцев и дней.
2. int getYears() - возвращает количество лет в периоде.
3. int getMonths() - возвращает количество месяцев в периоде.
4. int getDays() - возвращает количество дней в периоде.
5. Period plusYears(long yearsToAdd) - добавляет указанное количество лет к периоду.
6. Period minusMonths(long monthsToSubtract) - вычитает указанное количество месяцев из периода.
==>> Класс Duration
представляет собой продолжительность времени в виде количества секунд и наносекунд. Он может быть использован для вычисления разницы между двумя моментами времени или для добавления/вычитания определенного количества времени к моменту времени. Основные методы класса Duration:
1. static Duration ofSeconds(long seconds) - создает экземпляр класса Duration с указанным количеством секунд.
2. static Duration ofMinutes(long minutes) - создает экземпляр класса Duration с указанным количеством минут.
3. long getSeconds() - возвращает количество секунд в продолжительности.
4. long toMinutes() - возвращает количество минут в продолжительности.
5. Duration plusSeconds(long secondsToAdd) - добавляет указанное количество секунд к продолжительности.
6. Duration minusMinutes(long minutesToSubtract) - вычитает указанное количество минут из продолжительности.
Эти классы предоставляют удобные методы для работы с периодами и продолжительностями времени, что делает их полезными инструментами при работе с датами и временем в Java.