Найти тему
JavAKnazzz

Java и время

Оглавление

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.