Что вызывает ошибки 2010 года?

Есть много сообщений о системах, которые не понимают 2010 год, но я не знаю почему. Насколько я могу судить, современные системы, за которыми я ухаживаю, работают нормально, но я хотел бы знать, в чем же заключается проблема поиска.

Может ли кто-нибудь пролить свет на это, пожалуйста?

Изменить: http://www.rte.ie/business/2010/0105/bug.html - Информация об этом влияет на кредитные карты в Германии

10 ответов

Решение

Несколько протоколов, используемых в банковской и телекоммуникационной сфере, включая протокол SMS, кодируют год в виде BCD в одном байте.

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

Encoding  Binary-interpreted  BCD-interpreted
0x01      2001                2001
0x02      2002                2002
...
0x09      2009                2009
0x10      2016                2010
...

Это, скорее всего, причина ошибки Windows Mobile.

Одно из возможных объяснений в статье ниже

http://www.theregister.co.uk/2010/01/05/symantec_y2k10_bug/

Напоминает мне о вашей недавней статье о дешевых и грязных исправлениях ошибок Y2K, когда некоторые недобросовестные программисты вставляют простой if <10 = 20xx, в противном случае дата 19xx

У SpamAssassin было правило помечать даты в будущем как спам:

/20[1-9][0-9]/

Исправление пришло на несколько дней позже, но все довольно просто:

/20[2-9][0-9]/

Увидимся через десять лет.

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

У меня есть система, которая использует однозначное поле года. Да. Одна цифра Таким образом, причина этой системы заключается в том, что "2000" выражается так же, как "2010".

Я позаботился о небольшом сбое 2010 года на сайте в прошлые выходные, хотя это было всего лишь результатом недосмотра в кодировании.

Кто-то подумал, что было бы неплохо установить значение элемента списка на текущий dateTime.year.Now(), если список содержал только элементы до 2009 года.

ddlItem.findByText(DateTime.Now.Year.ToString())

Одна из них, о которой я слышал, это быстрые исправления, которые люди сделали для Y2K, даже не подумав об этом. Так что, если xx < 10, то 20xx, иначе 19xx.

Вот снимок экрана защиты конечной точки Norton Symantec

http://img695.imageshack.us/img695/4500/152010112800am.jpg

Действительно приятно, что никто @ symantec не сообщил своим клиентам... Пока статья не была опубликована: http://www.theregister.co.uk/2010/01/05/symantec_y2k10_bug/

Я использовал Google Code Search, чтобы найти ошибки y2010 в программном обеспечении с открытым исходным кодом. Я искал один конкретный шаблон, который будет указывать на ошибку (использование "200%d" в качестве строки формата printf), и нашел несколько проектов с этой ошибкой. Творческое применение шаблонов поиска может, вероятно, привести к появлению более разных ошибок.

Дело в том, что в компоненте есть ошибка, которая разбивает год на две части. Вторая часть используется в сравнении, так что цифра 10 находится не в базе 10, а в базе 16, что означает, что она равна 0x10 = 16 (шестнадцатеричное).

Другие вопросы по тегам