Знаешь ли ты разницу между
'Y' и 'y' в паттерне даты Java?🔸Проблема
Код:
Date date = new Date("2024/12/31");
var formatter = new SimpleDateFormat("dd-MM-YYYY");
System.out.println(formatter.format(date));Результат:
31-12-2025 ← Уехали на год вперёд!
А если использовать правильный:
var formatter = new SimpleDateFormat("dd-MM-yyyy");
// 31-12-2024 ✅🔸 В чём разница?
`y` (lowercase) = обычный год → 2024, 2025
`Y` (UPPERCASE) = неделя-года (ISO 8601) → может быть на год больше/меньше!
🔸 Почему так?
Y использует ISO-8601 стандарт: первая неделя года — та, где четверг в январе.31 декабря 2024 входит в первую неделю 2025, поэтому
Y выдаёт 2025!1 января 2027 входит в последнюю неделю 2026, поэтому
Y выдаёт 2026!🔸 Реальные баги
❌ Bouncy Castle — нашли несколько мест с
'Y', исправили на 'y'❌ OpenGrok — то же самое
💡 Правило
🔸 Никогда не используй `Y` в паттерне даты, если не знаешь что это!
🔸 Используй `y` для обычного года
📎 Статья
🎙 Новости
📝 База вопросов
