Как стать автором
Обновить

В 2024 году выяснилось, что ПО многих крупных IT-компаний всё ещё не может корректно обрабатывать дату 29 февраля

Время на прочтение2 мин
Количество просмотров11K
Всего голосов 33: ↑33 и ↓0+33
Комментарии83

Комментарии 83

Поколение, не заставшее проблему 2000 года, открыло для себа 29 февраля.

Мне вот интересно, эти из "поколения" где были вообще в 2020, 2016, 2012...

Деградируем-с...

эти из "поколения" где были вообще в 2020, 2016, 2012...

Заканчивали школу ;) А высшее образование, как известно, программисту без надобности ;))

в ВУЗе разве отдельно рассказывают про високосные года? собственно для этого бага высшего образования какбы не нужно, тут надо просто блин школьные знания о календаре иметь

p.s. еще у многих крышу рвет от часовых поясов....а если они на високосный год накладываются...

С календарём та же ерунда, что и с шифрованием: или имей общепризнанный готовый, или не имей никакого. Ну или посвящай годы изучению, написанию и отладке нового модуля календаря, вместо всего остального.

Оооо! Я в школе писал "вечный календарь" на бейсике, но я не знал, что годы, оканчивающиеся на "00" обычно не являются високосными, и если для построения на 100+ лет ошибка не обнаруживалась, то глубже 1900 почему-то с контрольными таблицами возникали расхождения... общедоступного интернета тогда в экс-СССР не было, и каково же было моё удивление, когда в какой-то энциклопедии я нашёл статью об алгоритмах "високосности"... а потом я стал укапываться в преобразования юлианский-григорианский... и так и не дописал свою "супер-полезную и компактную программу" )))

Я даже не про это. Знаете, сколько даже в Григорианский календарь вносили исключений? В истории, его несколько раз смещали туда-сюда глобально. Есть и сейчас местечковые закидоны, когда дату сдвинули на 1 просто потому что причины. С часовыми поясами всё ещё круче. Они то и дело меняются, и не только на 1. Есть места, где постановили сдвинуть время на 30 минут.

Есть и 45 минут, острова возле австралии. Для часовых поясов и дат (в том числе тайских, японских и других экзотических) есть конверторы, которые корректно работают с базами. Все у кого произошла ошибка обработки даты неквалифицированные.

Прям-таки годы? :))) - зачёт :)))

Задачку с правильным расчетом высокосных годов я решал еще в школе по заданию учителя. На турбо-паскале, в 90х. И даже тогда она особо сложной не была. А сегодня у всех лапки...

И даже тогда она особо сложной не была.

Где-то была статья про 10 (или больше) заблуждений о времени у программистов. Ничего сложного, да ;)

Речь про эту статью. Еще рекомендую вот это видео.

Знаете как большинство работает с датами на js? Перевести в строку, порезать по разделителю и получить в массив. Потом в нужном элементе массива приплюсовать 1 и проверить на условия, соответствующим образом поменяв соседние (месяц/год).

Вы просто погуглите на SO - там большинство советов в таком стиле)

И в более модных языках подход не особо меняется. Так что я вот вообще не удивлен этим бесконечным сбоям на датах, часовых поясах и доп. секундах...

Вы просто погуглите на SO - там большинство советов в таком стиле)

Вредные советы из интернетов ;)

О! Коллега! Да-да, ничего сложного не было! Но была масса нюансов, на которые школьники не всегда обращали внимание, а те, кто обращали, сталкивались с недостаточностью источников информации, и даже сейчас непросто сходу сказать, был ли 1200-й год високосным. А 800-й? А 800-й до н.э. А какая дата наступила на следующий день после 31 декабря 1 г. до н.э. и какие ближайшие високосные годы к этой дате? Я примерно на этом этапе просто потерял интерес к задаче, т.к. постоянно зависать в районной библиотеке, перечитывая "список использованной литературы" и роясь по "ссылкам" из неполных источников довольно скоро надоело =)

Вообще да, для астрономов, например, целый курс про летоисчисления и время

НЛО прилетело и опубликовало эту надпись здесь

Средний срок жизни стартапа 1-3 года :)

Вы таки полагаете, что стартаперов тоже, стирают память того, вместе со стартапом?

Что-ты. Про рыбок гуппи говорят что 3-30 секунд, кто говорит что гораздо дольше...

Hidden text

Информация о том, что у рыбы память 3 секунды не подтверждена научными фактами. Согласно последним научным исследованиям, даже у аквариумных рыбок, таких как золотые или гуппипамять о событиях сохраняется до трех недель. Длительность памяти будет зависеть от значимости события: чем оно более важно для выживания, тем дольше будет сохраняться в памяти.

зачем стирать память, просто зачем обрабатывать и тестировать кейс если он не всплывет: потом перепишется а потом просто забывается и выстреливает, и 4 года про него можно и забыть

Ну часть где обрабатывается дата кто делает? Сеньор будет что ли? Джун! А они каждый год-два уже новые - или бросили или до сеньора доросли

Как они выживут в 2038-м, я вообще не представляю =)

каждый четвертый год?

Тут надо переписать с нуля.

Ну в следущий раз напишу как надо,

Часы Amazfit

Это явно не про все модели с этим лейблом

Вы правы, добавил конкретные модели. Спасибо большое!

 Amazfit Pop 3R и Pop 3S  - это кстати, даже и не Amazfit, а брендированный ими дешевый OEM.

Понабрали литкод-макак, неудивительно...

Понабрали "а-зачем-вообще-алгоритмы-бахнем-массив"-макак

Не, ну вы вспомните как "удобно" работать с датами в том же js. Я вот вообще не удивлён таким багам...

Понабрали "а-зачем-вообще-алгоритмы-бахнем-массив"-макак

Так-то крупные компании набирают именно алгоритмистов. Так что - мимо. Результаты работы этих алгоритмистов мы воочую наблюдаем.

Странно, а куда набираются вот эти все решатели бизнес-задач, неужто прямо в уличный клининг идут?

Странно, а куда набираются вот эти все решатели бизнес-задач, неужто прямо в уличный клининг идут?

В конторы где нет алгособесов. И у них всё работает.

Инженер может быть алгоритмистом, и применять алгоритмы к месту. Но сектант-алгоритмист в принципе не может быть инженером. Что мы по результатам их трудов и наблюдаем.

у них всё работает.

Hidden text

Иногда "бахнуть массив" может оказаться гораздо эффективнее алгоритмов. Таблицы Брадиса, например, были вычислены больше 100 лет назад, но до сих пор хороши и удобны. И даже в космос по ним летали и самолёты строили.

Конечно, деды считали, и нам велели.

Деды как раз велели не считать.

так считать и применять это 2 разные вещи как теория и практика.

Надо понимать где что лучше и правельнее использовать

более того - надо правильно уметь применять и понимать, когда проще посчитать, а когда взять значения из Брадиса.

Конечно, деды считали, и нам велели.

То о чём я и говорил: инженер может применить либо алгоритм, либо массив табулированых предвычисленных данных, что где уместнее. Но сектант-алгоритмист в принципе профнепригоден в айти.

Совсем недавно узнал о существовании проблемы 10000 года (точнее, предполагаемой проблемы)

Проблема 2038 года куда ближе и страшнее.

Проблема 2038 года куда ближе и страшнее.

в 2030 все пофиксят, надо просто подождать

НЛО прилетело и опубликовало эту надпись здесь

Уверен? Кхе... таких дат дофига и больше.

А уж просто багов, когда несколько из них в фреймворках дадут какой-либо кумулятивный эффект, то можно и не зацикливаться на дату...

Возьмёт какой-либо эко-активист и заложит исправление в коде на 30 августа 2027 года... Почему эта дата? Да от балды. А этот фреймворк будет очень популярен. Опс.

Жаль не доживу до 2100 года - интересно сколько всего опять навернётся из-за того что его будут считать високосным. Если переживём 2038 год...

Пережили 2000-ый, хотя такого насилия в виде гигантской кодовой базы, которую никто никогда не верифицировал... тогда не было, т.к. компьютеры были реже, ресурса у них мало.

Он как раз был високосным. А вот 2100 не будет, потому что не делится на 400.

Думаю, речь о проблеме 2000, а не о високосности. Очень много про неё говорили. Я на новый 2000-й год включил компьютер с опаской.

Большая часть ПО делается в режиме кранчей, горящих сроков, экономии на персонале и всего такого, по принципу "надо всё сделать ко вчера хоть как-нибудь!". Так что чему удивляться?

зачем мне эти скучные пары по паскалю в универе? Мёртвый язык.

Лабы по паскалю на первом курсе:

Задание 1: считаем, високосный ли год.

Задание 2: считаем номер дня в году, особенно не забываем про високосные.

Так это можно считать вообще на любом языке. И почему бы тогда не выбрать тот, который при этом будет иметь коммерческий спрос? Или на котором это хотя бы делать удобнее? Проблема ВУЗов в том, что их программа отстаёт от технохайпа, при чём нехило

обычно паскаль идёт первым, потом изучаются более современные языки. Но я вам скажу такое, когда я учился в университете того языка на котором я сейчас пишу не было вообще. Я не топлю за паскаль, но и не считаю его чем-то ужасным. И уж точно я против того чтобы студент выпустился написав всё только на питоне.

На сайте розничной сети Best Buy нельзя было выбрать 29 февраля 2024 года в качестве даты истечения срока действия кредитной карты.

Разве указывается дата истечения? На карточках же только месяц и год

скорее карта у который expdate стоит 02/24 не работала 29 февраля потому что срок действия истек

Может проще уже ввести годы по 360 скажем дней, с делением по 30 дней в месяце, а оставшиеся дни объявить общепланетным праздником и все события, которые будут в это время происходить записывать или на последний день до или на первый день после праздника (я про дни рождения и события). Для значимых дополнительно указывать текстом "через ... суток после (дата)" и тп ;-)))) А сколько будет в этом празднике дней - уже не так важно будет.

Ну или 13й месяц ввести и туда их все.

По моему такая система будет в разы более удобна для программистов.

такая система будет в разы более удобна для программистов

Кроме программистов и другие люди есть. Им то зачем переучиваться?

так все месяцы одинаковые по длительности, а этот другой - да еще большинство будет отдыхать - так что тут можно учесть что кто отдыхает получает только "отпускные", а кто работает - в рамках трудового договора из расчёта отработанных дней.... так то понятно что если такое сделать, то придётся многое менять и в технике и в законах....

Просто чем больше тянем с решением таких проблем (с календарями и тп) тем больше придётся потом менять..... и сложнее.

и многим другим то же будет удобнее. Я вот "с ходу" не помню месяцы где 31 день, а где 30, мне календарик приходится для этого искать....

Ой плиз. "правило костяшек" - я думал это в детстве всем рассказывали.

Скажите СевероАмериканцам которые так и не осилили на СИ перейти, какой уж тут календарь менять

хах. тут у нас не могут с оформлением курсяков-вкр договориться в рамках одного вуза(меняют правила раз в год-два "сегодня "рисунок", завтра "Рис.".... а мы тут про страны что-то обсуждаем....

Винсент: А знаешь, как в Париже называют четвертьфунтовый чизбургер?

Джулс: Что, они не зовут его четвертьфунтовый чизбургер?

Винсент: У них там метрическая система. Они вообще там не понимают, что за хрен четверть фунта.

Джулс: И как они его зовут?

Винсент: Они зовут его «Роял с сыром».

Джулс: «Роял с сыром»? А как же тогда они зовут «Биг Мак»?

Винсент: «Биг Мак» это «Биг Мак», только они называют его «Лё Биг Мак».

А сколько будет в этом празднике дней - уже не так важно будет.

У вас какие-то очень наивные предложения. А вы в праздники дома сидите на диване в темноте?

Даже чтобы у вас было электричество - круглосуточно работает дофига сложных механизмов, которые, в том числе, считают всякие метрики. Их не заставишь "не считать в праздники".

А захотите вы в праздник пойти в парк и съесть мороженое - вашу покупку надо будет где-то посчитать и учесть.

Между прочим, земля тоже вращается неравномерно и ошибка измерения рано или поздно накапливается, давая дополнительные секунды к году. И даже это очень важно.

ну я как бы вариант предложил для упрощения расчётов, тут вариантов масса на самом деле. В большинстве устройств этот период вообще можно игнорировать.

Просто меня вот сейчас опсосы очередной раз бесят - "за 30 дней" с их оплатой.... хотя тариф вроде как помесячный.... ну вот не предусмотрено в андроиде считалки траффика "за 30 дней", только "за месяц", а в итоге каждые неск. мес. приходится корректировать дату "расчётного периода"

С солнцем договоришься, чтобы все ровно летало?

13 месяцев по 28 дней. Это ровно 4 недели, т.е. 5-ое число всегда будет пятницей и не надо будет покупать отрывные календари. Остаётся 1-2 левых дня. Вот их можно сделать праздником или прицепить к последнему месяцу и сделать вторым воскресеньем.

А как 13 месяцев делить на полугодия и кварталы (удобно для всякого планирования и отчетностей)?

Как угодно, хоть отрезать недельку от месяца, хоть сделать неровной, хоть изменить схему планирования.

"День был без месяца". (ц) Записки сумасшедшего

По моему такая система будет в разы более удобна для программистов.

Для программистов будет удобнее всего использовать unixtime. Все эти часы, минуты, дни недели и месяцы - от лукавого.

Заодно и на СИ перейти. Килосекунда - это типа минут 15. Вместо суток - 100 килосекунд. Вместо недели - мегасекунда. 50 мегасекунд - это год. Удобно! Людишки конечно первое время будут возмущаться что 100 килосекунд не синхронизированы с длиной суток, а Новый Год припадает на разные поры года, но потом привыкнут. Зато все просто и понятно.

Ну unixtime же банально не работает с датами меньше 1970х, а так же подвержено целочисленному переполнению. Т.е. если вам надо будет работать с датами ранее 1900х или позже 2038-го - у вас гарантированные проблемы. Фактически оно подходит для узкого диапазона годов и все, кто массово на него завяжется сейчас - в будущем столкнутся с проблемами.
И причем до 2038 не так и много времени осталось. А потом опять начнутся всякие приседания в стиле "сюда смотри, если дата меньше Х, сюда - если больше".

Никто не мешает хранить unixtime в signed int_128t. Хватит до питекантропов. Но возникает другая проблема - обороты Земли занимают не целое число секунд. Что делать с набегающими погрешностями?

Где-то это уже было. У Снегова что ли…

Это определенно было у Винджа в "Глубине в небе".

Точно, вот где читал

Всё равно будут проблемы, когда нужно будет куда-то ехать 1-го января, а год был високосным. Или когда 2100-й не будет високосным и люди 1 января 2101-го массово пропустят поездки.

Gigachat от Сбера не отстаёт от тренда!

29 февраля 2024 года. Это корректная дата?
Нет, 29 февраля 2024 года не является корректной датой, так как 2024 год не является високосным. Високосный год - это год, который имеет 366 дней, а не 365, как обычный год.
...
Таким образом, в 2024 году 29 февраля не существует. Последний високосный год был в 2020 году, а следующий будет в 2024 году.

Самое комбо собрал Казахстан:

В полночь с 29 на 1 у половины страны наступила:

Пятница, 1 Марта, Весна.

После чего перевод часов назад откатил все обратно на:

Четверг, 29 февраля, Зима.

Тем временем:

«Сегодня первый раз 29 февраля после запуска часов с полным календарём.
Все правильно переключилось»

https://rt20.getbb.ru/viewtopic.php?f=48&t=106891&start=1900

На одних логических микросхемах, Карл!

Интересно, наша церковь учитывает, что 2100-й не будет високосным? У них же юлианский календарь. У них в 2101-м рождество станет 8 января? Мне кажется, многим олдам невозможно будет это объяснить.

Появится старый старый новый год, два дня подряд будут отмечать. Но это будут уже не наши проблемы.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Другие новости

Истории