27просмотров
29 декабря 2025 г.
provocationScore: 30
⏳ TimeZone: тихая проблема, которая ударит в продакшене. LocalDateTime vs ZonedDateTime vs Instant — выбор не просто так. 🚫🙅 Типичная ошибка: // ОПАСНО для событий, которые должны быть в конкретный момент времени
LocalDateTime meetingTime = LocalDateTime.of(2024, 6, 15, 14, 30); // Сохранили в БД...
// У пользователя в Калифорнии meetingTime отобразится как 14:30 его времени! ✔️👍 Правильный подход: // Для моментов времени (meeting, flight, payment) — Instant
Instant now = Instant.now(); // Внутри — Unix timestamp // Для времени с часовым поясом — ZonedDateTime
ZonedDateTime meeting = ZonedDateTime.of( 2024, 6, 15, 14, 30, 0, 0, ZoneId.of("Europe/Moscow")
); // Для времени без контекста (день рождения) — LocalDate
LocalDate birthday = LocalDate.of(1990, 5, 20); ❗️⭐ Особый случай — хранение в БД: 1. TIMESTAMP WITH TIME ZONE → Instant
2. TIMESTAMP WITHOUT TIME ZONE → LocalDateTime (осторожно!)
3. DATE → LocalDate 💎⭐️ Лайфхак: Внутри приложения работайте с Instant, конвертируя в нужный ZoneId только на границе (UI, API).
// Единое представление
Instant eventTime = Instant.now(); // Для пользователя
ZonedDateTime userView = eventTime.atZone(user.getTimeZone()); 📌 Итог: Неправильная работа со временем — это тихий баг, который проявится при смене времени года или у пользователей в другом часовом поясе. Определите семантику времени для каждой сущности! ✈️Подписаться: @iamjavadev #datetime #timezone #java8 #bestpractices