Наткнулся сегодня (24-12-30) на преинтереснейшую ошибку.
Простенький скрипт ищет файл по дате создания в имени, и вместо вчерашнего дня (24-12-29) почему-то ищет файл за следующий год (25-12-29).
Казалось бы, мистика, всё прекрасно работало с лета, и как на зло сломалось как раз под конец года ... и кто в этом виноват?
Не будем вдаваться в подробности, кто этому виной, а посмотрим на код:
public static void main(String[] args) throws ParseException {
String YY_pattern = "YY-MM-dd";
String yy_pattern = "yy-MM-dd";
SimpleDateFormat weekYear = new SimpleDateFormat(YY_pattern);
SimpleDateFormat year = new SimpleDateFormat(yy_pattern);
Date date = new SimpleDateFormat("yyy-MM-dd HH:mm").parse("2024-12-30 12:00");
System.out.println("Today :: " + date);
System.out.println(YY_pattern + " :: " + weekYear.format(date));
System.out.println(yy_pattern + " :: " + year.format(date));
}
И на результат его выполнения:
Today :: Mon Dec 30 12:00:00 EET 2024
YY-MM-dd :: 25-12-30
yy-MM-dd :: 24-12-30
А всё потому что в паттерне даты был ошибочно настроен год текущей недели вместо года текущего дня:
С первой неделей 2025 года, коллеги!
Комментарии (19)
randomsimplenumber
30.12.2024 20:17Как то оно античеловечно выглядит. И даты в java, и реализация задачи, и тестирование этого дела. как оно с лета работало, не привлекая внимание санитаров?
aleksandy
30.12.2024 20:17С лета оно работало потому, что все умные, а документацию пишут для дураков.
randomsimplenumber
30.12.2024 20:17символ Y в аргументе для SimpleDateFormat отвечает за год, основанный на номере недели.
Как то контринтуитивно. Не могу представить, зачем оно.
sergpank Автор
30.12.2024 20:17У многих менеджеров планы расписаны по неделям.
Они даже могут не знать какое сегодня число, но всегда знают которая сейчас неделя, и когда будет делайн.Но первую неделю года в разных системах вычисляю по-разному, где-то это первая неделя года, а где-то неделя в которой дней этого года больше чем прошлого.
Вещь очень важная в очень узких кругах.
randomsimplenumber
30.12.2024 20:17Номер недели в году - допустим, ок, вещь нужная в узких кругах. Но пересчитывать номер недели в год - что за диверсант это придумал? Да ещё и протащил в потроха Java.
Mingun
30.12.2024 20:17Ну а как вы со всем остальным миром, живущим в привычных датах, а не в номерах недель, взаимодействовать без конвертации собрались? Те же менеджеры — пусть живут в своих неделях, а рядовые исполнители работают с понедельника по пятницу и чихать им на то, какая это неделя в году.
randomsimplenumber
30.12.2024 20:17как я понимаю, проблема не в номере недели, а в преобразовании номера недели в номер года.
bill876
30.12.2024 20:17Вот вам в таблице с еженедельным отчетом нужно, чтобы сегодня было написано "2025 - неделя 1". Какой символ форматирования вы будете использовать?
muxa_ru
30.12.2024 20:17Каждый раз, когда я вижу год заданный ДВУМЯ цифрами, я вспоминаю рассказы о том, что "ошибка 2000" это вымысел. :)
sergpank Автор
30.12.2024 20:17Бывают случаи когда двух цифр для обозначения года достаточно, и переход на новое столетие пройдёт незаметно, ввиду того что твои файлы хранятся несколько месяцев.
randomsimplenumber
30.12.2024 20:17Через 75 лет в виртуальной машине, где крутится программа на давно забытом языке, что-то пойдёт не так.
aleksandy
30.12.2024 20:17Только за этот год это, наверное, четвёртая или пятая статья про разницу YYYY и yyyy в форматировании дат. Ребят, вы вообще в курсе, что люди старались, писали документацию?
Olegun
30.12.2024 20:17Все писатели, один я читатель...
https://habr.com/ru/companies/pvs-studio/articles/869920/
И, кстати, поиском ещё несколько раз находится
inzagher
30.12.2024 20:17Специально проверил поиском, нет ли у меня в проектах такой мины. Так то ерунда, но напороться на это - как нечего делать. Особенно, когда работа ведется на многих языках и на всех всё примерно одинаково. Но только примерно.
Maccimo
30.12.2024 20:17Ничего удивительного, согласно производственному календарю рабочий 2024 год закончился в субботу, 28 декабря. Зачем вы нарушаете Work-Life balance и работаете на праздниках?
Читайте JavaDoc до написания кода и будет вам счастье.
lair
Для вас банальная опечатка - это "преинтереснейшая ошибка"?
sergpank Автор
Конечно, закономерно поймать подобную ошибку в конце/начале года, но я всё равно нахожу это забавным.
Да и пост имеет шутливый, предпраздничный характер. Это точно не откровение, и не открытие.