Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Что такое synchronized в Java?
Что такое synchronized в Java?
Anonymous Quiz
8%
Это ключевое слово для создания потоков.
0%
Это ключевое слово для создания анонимных классов.
3%
Это ключевое слово для создания констант.
89%
Это ключевое слово для синхронизации потоков.
ZoneOffset, OffsetDateTime и конвертация времени между часовыми поясами
1. Что такое ZoneOffset?
ZoneOffset — это класс, представляющий фиксированное смещение от UTC (Coordinated Universal Time). Он выражается в виде количества часов, минут и секунд, на которые время отличается от UTC.
Например:
+03:00 — смещение на 3 часа вперед от UTC.
-05:00 — смещение на 5 часов назад от UTC.
ZoneOffset используется для работы с временем, которое не зависит от правил временных зон (например, летнего времени). Это особенно полезно, когда вам нужно работать с фиксированным смещением.
Пример создания ZoneOffset:
2. Что такое OffsetDateTime?
OffsetDateTime — это класс, представляющий дату и время с фиксированным смещением от UTC. Он объединяет LocalDateTime и ZoneOffset. В отличие от ZonedDateTime, OffsetDateTime не учитывает правила временных зон (например, летнее время).
Пример создания OffsetDateTime:
Когда использовать OffsetDateTime?
Когда вам нужно работать с временем, которое имеет фиксированное смещение от UTC.
Когда вам не нужно учитывать правила временных зон (например, летнее время).
3. Конвертация времени между часовыми поясами с помощью withZoneSameInstant()
Метод withZoneSameInstant() позволяет конвертировать время из одного часового пояса в другой, сохраняя момент времени (instant). Это полезно, когда вам нужно отобразить время в другом регионе.
Пример:
4. Получение текущего времени в конкретной временной зоне
Чтобы получить текущее время в конкретной временной зоне, используйте ZonedDateTime.now() с указанием ZoneId:
5. Daylight Saving Time (летнее время)
Летнее время — это практика перевода часов на час вперед весной и обратно осенью. Java Time API автоматически учитывает переход на летнее время. Например:
#Java #Training #Medium #Date #ZonedDateTime #OffsetDateTime #withZoneSameInstant
1. Что такое ZoneOffset?
ZoneOffset — это класс, представляющий фиксированное смещение от UTC (Coordinated Universal Time). Он выражается в виде количества часов, минут и секунд, на которые время отличается от UTC.
Например:
+03:00 — смещение на 3 часа вперед от UTC.
-05:00 — смещение на 5 часов назад от UTC.
ZoneOffset используется для работы с временем, которое не зависит от правил временных зон (например, летнего времени). Это особенно полезно, когда вам нужно работать с фиксированным смещением.
Пример создания ZoneOffset:
ZoneOffset offset = ZoneOffset.ofHours(3); // +03:00
System.out.println("ZoneOffset: " + offset);
ZoneOffset offsetWithMinutes = ZoneOffset.ofHoursMinutes(5, 30); // +05:30
System.out.println("ZoneOffset with minutes: " + offsetWithMinutes);
2. Что такое OffsetDateTime?
OffsetDateTime — это класс, представляющий дату и время с фиксированным смещением от UTC. Он объединяет LocalDateTime и ZoneOffset. В отличие от ZonedDateTime, OffsetDateTime не учитывает правила временных зон (например, летнее время).
Пример создания OffsetDateTime:
ZoneOffset offset = ZoneOffset.ofHours(3);
OffsetDateTime offsetDateTime = OffsetDateTime.now(offset);
System.out.println("OffsetDateTime: " + offsetDateTime);
Когда использовать OffsetDateTime?
Когда вам нужно работать с временем, которое имеет фиксированное смещение от UTC.
Когда вам не нужно учитывать правила временных зон (например, летнее время).
3. Конвертация времени между часовыми поясами с помощью withZoneSameInstant()
Метод withZoneSameInstant() позволяет конвертировать время из одного часового пояса в другой, сохраняя момент времени (instant). Это полезно, когда вам нужно отобразить время в другом регионе.
Пример:
ZonedDateTime moscowTime = ZonedDateTime.now(ZoneId.of("Europe/Moscow"));
ZonedDateTime newYorkTime = moscowTime.withZoneSameInstant(ZoneId.of("America/New_York"));
System.out.println("Moscow Time: " + moscowTime);
System.out.println("New York Time: " + newYorkTime);
4. Получение текущего времени в конкретной временной зоне
Чтобы получить текущее время в конкретной временной зоне, используйте ZonedDateTime.now() с указанием ZoneId:
ZonedDateTime moscowTime = ZonedDateTime.now(ZoneId.of("Europe/Moscow"));
ZonedDateTime newYorkTime = ZonedDateTime.now(ZoneId.of("America/New_York"));
System.out.println("Moscow Time: " + moscowTime);
System.out.println("New York Time: " + newYorkTime);
5. Daylight Saving Time (летнее время)
Летнее время — это практика перевода часов на час вперед весной и обратно осенью. Java Time API автоматически учитывает переход на летнее время. Например:
ZonedDateTime beforeDST = ZonedDateTime.of(2023, 3, 26, 1, 59, 0, 0, ZoneId.of("Europe/Moscow"));
ZonedDateTime afterDST = beforeDST.plusMinutes(1);
System.out.println("Before DST: " + beforeDST);
System.out.println("After DST: " + afterDST);
#Java #Training #Medium #Date #ZonedDateTime #OffsetDateTime #withZoneSameInstant
6. Проверка, действует ли летнее время
Чтобы проверить, действует ли летнее время для конкретной временной зоны в определенный момент, используйте метод isDaylightSavings():
Плюсы и минусы работы с ZoneOffset и OffsetDateTime
Плюсы:
Простота: ZoneOffset и OffsetDateTime работают с фиксированным смещением, что упрощает их использование.
Потокобезопасность: Оба класса являются immutable и thread-safe.
Универсальность: OffsetDateTime подходит для случаев, когда не нужно учитывать правила временных зон.
Минусы:
Ограниченность: ZoneOffset не учитывает правила временных зон, такие как летнее время.
Ошибки: Неправильное использование может привести к некорректным результатам, особенно при работе с регионами, где применяется летнее время.
Пример использования ZoneOffset и OffsetDateTime
#Java #Training #Medium #Date #ZonedDateTime #OffsetDateTime #withZoneSameInstant
Чтобы проверить, действует ли летнее время для конкретной временной зоны в определенный момент, используйте метод isDaylightSavings():
ZoneId zone = ZoneId.of("Europe/Moscow");
ZonedDateTime dateTime = ZonedDateTime.now(zone);
boolean isDST = zone.getRules().isDaylightSavings(dateTime.toInstant());
System.out.println("Is DST active? " + isDST);
Плюсы и минусы работы с ZoneOffset и OffsetDateTime
Плюсы:
Простота: ZoneOffset и OffsetDateTime работают с фиксированным смещением, что упрощает их использование.
Потокобезопасность: Оба класса являются immutable и thread-safe.
Универсальность: OffsetDateTime подходит для случаев, когда не нужно учитывать правила временных зон.
Минусы:
Ограниченность: ZoneOffset не учитывает правила временных зон, такие как летнее время.
Ошибки: Неправильное использование может привести к некорректным результатам, особенно при работе с регионами, где применяется летнее время.
Пример использования ZoneOffset и OffsetDateTime
// Создание ZoneOffset
ZoneOffset offset = ZoneOffset.ofHours(3); // +03:00
// Создание OffsetDateTime
OffsetDateTime offsetDateTime = OffsetDateTime.now(offset);
System.out.println("OffsetDateTime: " + offsetDateTime);
// Конвертация в другой часовой пояс
ZonedDateTime zonedDateTime = offsetDateTime.atZoneSameInstant(ZoneId.of("America/New_York"));
System.out.println("ZonedDateTime in New York: " + zonedDateTime);
#Java #Training #Medium #Date #ZonedDateTime #OffsetDateTime #withZoneSameInstant
Класс Instant и TemporalAdjusters
Класс Instant и временные метки
Instant — это класс из Java Time API (пакет java.time), который представляет собой точку на временной шкале. Он хранит количество секунд и наносекунд, прошедших с эпохи Unix (1 января 1970 года, 00:00:00 UTC). Это делает его аналогом временных меток (timestamp), которые часто используются в системах для фиксации моментов времени.
Как работает Instant под капотом?
Внутри Instant хранит два поля:
long seconds — количество секунд с эпохи Unix.
int nanos — количество наносекунд (от 0 до 999,999,999), чтобы обеспечить точность до наносекунд.
Методы getEpochSecond() и getNano() позволяют получить эти значения.
Пример использования Instant:
Плюсы Instant:
Высокая точность (до наносекунд).
Независимость от временных зон (всегда в UTC).
Удобен для хранения и передачи временных меток.
Минусы Instant:
Не подходит для работы с человеко-читаемыми датами и временем (например, "2023-10-15 14:30").
Требует конвертации для отображения в локальных временных зонах.
Использование TemporalAdjusters
TemporalAdjusters — это утилитный класс, который предоставляет готовые методы для выполнения сложных операций с датами. Например, он позволяет находить "следующий понедельник", "последний день месяца" и т.д.
Как работает TemporalAdjusters?
Каждый метод TemporalAdjusters возвращает объект TemporalAdjuster, который можно передать в метод with() классов LocalDate, LocalDateTime и других.
Пример использования TemporalAdjusters:
Плюсы TemporalAdjusters:
Упрощает сложные операции с датами.
Читаемый и понятный код.
Гибкость: можно создавать собственные TemporalAdjuster.
Минусы TemporalAdjusters:
Ограниченный набор стандартных методов (например, нет встроенной поддержки для "первого вторника месяца").
Требует понимания временных типов (LocalDate, LocalDateTime и т.д.).
#Java #Training #Medium #Date #Instant #TemporalAdjusters
Класс Instant и временные метки
Instant — это класс из Java Time API (пакет java.time), который представляет собой точку на временной шкале. Он хранит количество секунд и наносекунд, прошедших с эпохи Unix (1 января 1970 года, 00:00:00 UTC). Это делает его аналогом временных меток (timestamp), которые часто используются в системах для фиксации моментов времени.
Как работает Instant под капотом?
Внутри Instant хранит два поля:
long seconds — количество секунд с эпохи Unix.
int nanos — количество наносекунд (от 0 до 999,999,999), чтобы обеспечить точность до наносекунд.
Методы getEpochSecond() и getNano() позволяют получить эти значения.
Пример использования Instant:
import java.time.Instant;
public class InstantExample {
public static void main(String[] args) {
// Получаем текущий момент времени
Instant now = Instant.now();
System.out.println("Текущий момент: " + now);
// Получаем количество секунд с эпохи Unix
long epochSecond = now.getEpochSecond();
System.out.println("Секунд с эпохи Unix: " + epochSecond);
// Получаем наносекунды
int nano = now.getNano();
System.out.println("Наносекунды: " + nano);
}
}
Плюсы Instant:
Высокая точность (до наносекунд).
Независимость от временных зон (всегда в UTC).
Удобен для хранения и передачи временных меток.
Минусы Instant:
Не подходит для работы с человеко-читаемыми датами и временем (например, "2023-10-15 14:30").
Требует конвертации для отображения в локальных временных зонах.
Использование TemporalAdjusters
TemporalAdjusters — это утилитный класс, который предоставляет готовые методы для выполнения сложных операций с датами. Например, он позволяет находить "следующий понедельник", "последний день месяца" и т.д.
Как работает TemporalAdjusters?
Каждый метод TemporalAdjusters возвращает объект TemporalAdjuster, который можно передать в метод with() классов LocalDate, LocalDateTime и других.
Пример использования TemporalAdjusters:
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public class TemporalAdjustersExample {
public static void main(String[] args) {
// Текущая дата
LocalDate today = LocalDate.now();
System.out.println("Сегодня: " + today);
// Следующий понедельник
LocalDate nextMonday = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
System.out.println("Следующий понедельник: " + nextMonday);
// Последний день месяца
LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("Последний день месяца: " + lastDayOfMonth);
}
}
Плюсы TemporalAdjusters:
Упрощает сложные операции с датами.
Читаемый и понятный код.
Гибкость: можно создавать собственные TemporalAdjuster.
Минусы TemporalAdjusters:
Ограниченный набор стандартных методов (например, нет встроенной поддержки для "первого вторника месяца").
Требует понимания временных типов (LocalDate, LocalDateTime и т.д.).
#Java #Training #Medium #Date #Instant #TemporalAdjusters
Что выведет код?
#Tasks
public class Task220125_1 {
public static void main(String[] args) {
try {
System.out.println("A");
throw new RuntimeException("B");
} catch (RuntimeException e) {
System.
out.println(e.getMessage());
} finally {
System.out.println("C");
}
}
}
#Tasks
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа с временными зонами
Почему важно хранить даты в UTC?
Универсальность: UTC — это стандарт, который не зависит от временных зон.
Согласованность: данные, хранящиеся в UTC, можно легко конвертировать в любую временную зону.
Избежание путаницы: исключаются ошибки, связанные с переходом на летнее время или разными временными зонами.
Пример конвертации из UTC в локальное время:
Обработка временных зон в веб-приложениях
Как принимать время от пользователя и конвертировать его в UTC?
Принимайте время от пользователя с указанием его временной зоны.
Используйте ZonedDateTime для конвертации в UTC.
Пример:
Проблемы с временными зонами
Неоднозначность времени при переходе на летнее время:
Например, в некоторых зонах время 2:30 может быть дважды (при переходе на зимнее время).
Решение:
Используйте ZonedDateTime и методы, которые учитывают такие случаи.
Разные форматы временных зон:
Например, "UTC+3" и "Europe/Moscow" могут означать одно и то же, но лучше использовать стандартные идентификаторы (например, "Europe/Moscow").
Ошибки при конвертации:
Убедитесь, что вы всегда знаете, в какой временной зоне находятся данные.
#Java #Training #Medium #Date #Best_Practicies
Почему важно хранить даты в UTC?
Универсальность: UTC — это стандарт, который не зависит от временных зон.
Согласованность: данные, хранящиеся в UTC, можно легко конвертировать в любую временную зону.
Избежание путаницы: исключаются ошибки, связанные с переходом на летнее время или разными временными зонами.
Пример конвертации из UTC в локальное время:
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class UTCToLocalTime {
public static void main(String[] args) {
// Текущий момент в UTC
Instant now = Instant.now();
System.out.println("UTC: " + now);
// Конвертация в локальное время (например, для Москвы)
ZonedDateTime localTime = now.atZone(ZoneId.of("Europe/Moscow"));
System.out.println("Московское время: " + localTime);
}
}
Обработка временных зон в веб-приложениях
Как принимать время от пользователя и конвертировать его в UTC?
Принимайте время от пользователя с указанием его временной зоны.
Используйте ZonedDateTime для конвертации в UTC.
Пример:
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class UserTimeToUTC {
public static void main(String[] args) {
// Время, введенное пользователем (например, 2023-10-15T14:30)
LocalDateTime userTime = LocalDateTime.parse("2023-10-15T14:30");
// Временная зона пользователя (например, Нью-Йорк)
ZoneId userZone = ZoneId.of("America/New_York");
ZonedDateTime userZonedTime = ZonedDateTime.of(userTime, userZone);
// Конвертация в UTC
ZonedDateTime utcTime = userZonedTime.withZoneSameInstant(ZoneId.of("UTC"));
System.out.println("UTC время: " + utcTime);
}
}
Проблемы с временными зонами
Неоднозначность времени при переходе на летнее время:
Например, в некоторых зонах время 2:30 может быть дважды (при переходе на зимнее время).
Решение:
Используйте ZonedDateTime и методы, которые учитывают такие случаи.
Разные форматы временных зон:
Например, "UTC+3" и "Europe/Moscow" могут означать одно и то же, но лучше использовать стандартные идентификаторы (например, "Europe/Moscow").
Ошибки при конвертации:
Убедитесь, что вы всегда знаете, в какой временной зоне находятся данные.
#Java #Training #Medium #Date #Best_Practicies
Основные аннотации для работы с датами в Spring
В Spring работа с датами часто связана с аннотациями, которые упрощают обработку временных данных в приложениях.
1. @DateTimeFormat
Эта аннотация используется для форматирования дат и времени в полях объектов или параметрах методов. Она позволяет указать, как строковое представление даты должно быть преобразовано в объект LocalDate, LocalDateTime и другие типы.
Пример использования:
Здесь поле eventDate будет автоматически преобразовано из строки формата yyyy-MM-dd в объект LocalDate.
Как это работает под капотом:
Spring использует DateTimeFormatAnnotationFormatterFactory для обработки аннотации. Этот фабричный класс создает форматтер, который преобразует строку в объект даты и наоборот.
Плюсы:
Упрощает преобразование строк в даты.
Поддерживает различные форматы дат.
Минусы:
Если формат строки не совпадает с указанным в pattern, возникает исключение.
2. @JsonFormat
Эта аннотация используется для управления сериализацией и десериализацией дат в JSON. Она часто применяется в REST API для корректного отображения дат.
Пример использования:
Здесь eventDateTime будет сериализован в JSON в формате yyyy-MM-dd HH:mm:ss и десериализован обратно в объект LocalDateTime.
Как это работает под капотом:
Jackson (библиотека для работы с JSON) использует эту аннотацию для настройки ObjectMapper. Форматтер преобразует дату в строку и обратно.
Плюсы:
Удобно для работы с REST API.
Поддерживает временные зоны.
Минусы:
Требует настройки формата для каждого поля.
3. @Temporal
Эта аннотация используется в JPA для указания типа временного значения (DATE, TIME, TIMESTAMP). Она помогает базе данных правильно интерпретировать даты.
Пример использования:
Здесь eventDate будет сохранен в базе данных как TIMESTAMP.
Как это работает под капотом:
Hibernate (реализация JPA) использует эту аннотацию для определения типа SQL-столбца в базе данных.
Плюсы:
Упрощает работу с датами в базе данных.
Поддерживает различные типы временных данных.
Минусы:
Работает только с устаревшим типом java.util.Date.
#Java #Training #Spring #Date #DateTimeFormat #JsonFormat #Temporal
В Spring работа с датами часто связана с аннотациями, которые упрощают обработку временных данных в приложениях.
1. @DateTimeFormat
Эта аннотация используется для форматирования дат и времени в полях объектов или параметрах методов. Она позволяет указать, как строковое представление даты должно быть преобразовано в объект LocalDate, LocalDateTime и другие типы.
Пример использования:
public class Event {
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate eventDate;
// Геттеры и сеттеры
}
Здесь поле eventDate будет автоматически преобразовано из строки формата yyyy-MM-dd в объект LocalDate.
Как это работает под капотом:
Spring использует DateTimeFormatAnnotationFormatterFactory для обработки аннотации. Этот фабричный класс создает форматтер, который преобразует строку в объект даты и наоборот.
Плюсы:
Упрощает преобразование строк в даты.
Поддерживает различные форматы дат.
Минусы:
Если формат строки не совпадает с указанным в pattern, возникает исключение.
2. @JsonFormat
Эта аннотация используется для управления сериализацией и десериализацией дат в JSON. Она часто применяется в REST API для корректного отображения дат.
Пример использования:
public class Event {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC")
private LocalDateTime eventDateTime;
// Геттеры и сеттеры
}
Здесь eventDateTime будет сериализован в JSON в формате yyyy-MM-dd HH:mm:ss и десериализован обратно в объект LocalDateTime.
Как это работает под капотом:
Jackson (библиотека для работы с JSON) использует эту аннотацию для настройки ObjectMapper. Форматтер преобразует дату в строку и обратно.
Плюсы:
Удобно для работы с REST API.
Поддерживает временные зоны.
Минусы:
Требует настройки формата для каждого поля.
3. @Temporal
Эта аннотация используется в JPA для указания типа временного значения (DATE, TIME, TIMESTAMP). Она помогает базе данных правильно интерпретировать даты.
Пример использования:
@Entity
public class Event {
@Temporal(TemporalType.TIMESTAMP)
private Date eventDate;
// Геттеры и сеттеры
}
Здесь eventDate будет сохранен в базе данных как TIMESTAMP.
Как это работает под капотом:
Hibernate (реализация JPA) использует эту аннотацию для определения типа SQL-столбца в базе данных.
Плюсы:
Упрощает работу с датами в базе данных.
Поддерживает различные типы временных данных.
Минусы:
Работает только с устаревшим типом java.util.Date.
#Java #Training #Spring #Date #DateTimeFormat #JsonFormat #Temporal
Что выведет код?
#Tasks
public class Task230125 {
public static void main(String[] args) {
int i = 0;
do {
System.out.print(i + " ");
i++;
if (i == 3) break;
} while (i < 5);
System.out.print(i);
}
}
#Tasks
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Что такое enum в Java?
Что такое enum в Java?
Anonymous Quiz
2%
Это интерфейс для работы с исключениями.
13%
Это класс для работы с коллекциями.
0%
Это класс для работы с потоками.
85%
Это тип данных, который представляет набор констант.
Продвинутые аннотации и нюансы работы с датами
4. @CreatedDate и @LastModifiedDate
Эти аннотации используются в Spring Data JPA для автоматического управления полями, хранящими дату создания и дату последнего изменения.
Пример использования:
Поля createdAt и updatedAt автоматически заполняются при создании и обновлении сущности.
Как это работает под капотом:
Spring Data JPA использует AuditingEntityListener для отслеживания изменений сущностей и автоматического заполнения этих полей.
Плюсы:
Упрощает управление временными метками.
Не требует ручного обновления полей.
Минусы:
Требует настройки аудита в конфигурации Spring.
5. @Scheduled
Эта аннотация используется для запуска задач по расписанию. Она поддерживает работу с датами и временем для выполнения задач в определенные моменты.
Пример использования:
Как это работает под капотом:
Spring использует TaskScheduler для выполнения методов, помеченных этой аннотацией, в соответствии с указанным расписанием.
Плюсы:
Удобно для выполнения периодических задач.
Поддерживает сложные расписания через cron.
Минусы:
Требует настройки пула потоков для выполнения задач.
6. Нюансы работы с датами
Временные зоны: Всегда учитывайте временные зоны при работе с датами. Используйте @JsonFormat(timezone = "UTC") или ZonedDateTime.
Иммутабельность: Классы дат в Java (например, LocalDate, LocalDateTime) являются неизменяемыми. Это означает, что любые операции возвращают новый объект.
Сериализация: При работе с REST API убедитесь, что даты сериализуются и десериализуются в правильном формате.
#Java #Training #Spring #Date #CreatedDate #LastModifiedDate #Scheduled
4. @CreatedDate и @LastModifiedDate
Эти аннотации используются в Spring Data JPA для автоматического управления полями, хранящими дату создания и дату последнего изменения.
Пример использования:
@Entity
public class Event {
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
// Геттеры и сеттеры
}
Поля createdAt и updatedAt автоматически заполняются при создании и обновлении сущности.
Как это работает под капотом:
Spring Data JPA использует AuditingEntityListener для отслеживания изменений сущностей и автоматического заполнения этих полей.
Плюсы:
Упрощает управление временными метками.
Не требует ручного обновления полей.
Минусы:
Требует настройки аудита в конфигурации Spring.
5. @Scheduled
Эта аннотация используется для запуска задач по расписанию. Она поддерживает работу с датами и временем для выполнения задач в определенные моменты.
Пример использования:
@Component
public class EventScheduler {
@Scheduled(cron = "0 0 12 * * ?") // Запуск каждый день в 12:00
public void scheduleEvent() {
System.out.println("Event scheduled at: " + LocalDateTime.now());
}
}
Как это работает под капотом:
Spring использует TaskScheduler для выполнения методов, помеченных этой аннотацией, в соответствии с указанным расписанием.
Плюсы:
Удобно для выполнения периодических задач.
Поддерживает сложные расписания через cron.
Минусы:
Требует настройки пула потоков для выполнения задач.
6. Нюансы работы с датами
Временные зоны: Всегда учитывайте временные зоны при работе с датами. Используйте @JsonFormat(timezone = "UTC") или ZonedDateTime.
Иммутабельность: Классы дат в Java (например, LocalDate, LocalDateTime) являются неизменяемыми. Это означает, что любые операции возвращают новый объект.
Сериализация: При работе с REST API убедитесь, что даты сериализуются и десериализуются в правильном формате.
#Java #Training #Spring #Date #CreatedDate #LastModifiedDate #Scheduled
Ровно 29 лет назад, 23 января 1996 года, вышла первая мажорная версия JDK и с тех пор Java прочно заняла место рядах языков программирования.
С днем рождения, Java!
Please open Telegram to view this post
VIEW IN TELEGRAM