Что является причиной ошибок 2010 года?

StackOverflow https://stackoverflow.com/questions/2007252

  •  18-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

В 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/

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

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

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

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

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

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

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

Я слышал о быстрых решениях проблемы 2000 года, которые люди не задумывались.То есть, если xx < 10, то 20xx, иначе 19xx.

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

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

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

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

Вот снимок экрана Norton Symantec Endpoint Protection.

альтернативный текст http://img695.imageshack.us/img695/4500/152010112800am.jpg

Очень приятно, что никто из Symantec не проинформировал своих клиентов...До публикации статьи: http://www.theregister.co.uk/2010/01/05/symantec_y2k10_bug/

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top