Что вызывает ошибки 2010 года?
Есть много сообщений о том, что системы не понимают 2010 год, но я не знаю, почему. Существующие системы, за которыми я смотрю, отлично работают, насколько я могу судить, но я хотел бы знать, какова реальная проблема в поиске лучше.
Может ли кто-нибудь пролить свет на него, пожалуйста?
Изменить: http://www.rte.ie/business/2010/0105/bug.html - Информация об этом влияет на кредитные карты в Германии
Ответы
Ответ 1
Несколько протоколов, используемых в банковской и телекоммуникационной сферах - включая протокол SMS - кодируют год как BCD в одном байте.
С 2000-2009 года можно легко ошибиться в интерпретации года как стандартного двоичного числа, так как кодирование будет одинаковым:
Encoding Binary-interpreted BCD-interpreted
0x01 2001 2001
0x02 2002 2002
...
0x09 2009 2009
0x10 2016 2010
...
Скорее всего, это причина ошибки Windows Mobile.
Ответ 2
Одно из возможных объяснений приведено в статье ниже
http://www.theregister.co.uk/2010/01/05/symantec_y2k10_bug/
Напоминает мне о вашей недавней статье о дешевых и грязных исправлениях ошибок в Y2K, где некоторые недобросовестные программисты ставят простой, если < 10 = 20xx иначе дата равна 19xx
Ответ 3
В SpamAssassin было правило, чтобы отмечать даты в будущем как спам:
/20[1-9][0-9]/
Исправление произошло через несколько дней, но это довольно просто:
/20[2-9][0-9]/
Увидимся через десять лет.
Ответ 4
У меня есть система на работе, которая использует однозначное поле года. Да. Одна цифра. Поэтому причина, по которой эта система терпит неудачу, заключается в том, что "2000" выражается так же, как "2010".
Ответ 5
Тот, о котором я слышал, был быстрым исправлением, которое люди делали для Y2K, не думая об этом. Поэтому, если xx < 10 затем 20xx еще 19xx.
Ответ 6
Возможно, это связано с тем, что молодые разработчики начали свою карьеру после Y2K и используют 1 цифру для представления года.
Ответ 7
В прошлый уик-энд я позаботился о небольшом провале 2010 года на сайте, но это был результат недосмотра в кодировании.
Кто-то подумал, что было бы неплохо установить значение элемента списка текущей dateTime.year.Now(), когда список содержит только элементы до 2009 года.
ddlItem.findByText(DateTime.Now.Year.ToString())
Ответ 8
Вот скриншот защиты конечных точек norton symantec
alt text http://img695.imageshack.us/img695/4500/152010112800am.jpg
Действительно приятно, что никто @symantec не сообщил своим клиентам...
До публикации статьи: http://www.theregister.co.uk/2010/01/05/symantec_y2k10_bug/
Ответ 9
Это то, что в компоненте есть ошибка, которая разбивает год на две части. Вторая часть используется для сравнения, так что цифра 10 не находится в основании 10, а в основании 16 означает, что она равна 0x10 = 16 (hex).
Ответ 10
Я использовал Google Code Search для найти ошибки y2010 в ПО с открытым исходным кодом. Я искал один конкретный шаблон, который указывал бы на ошибку (использование "200% d" в качестве строки формата printf) и нашел несколько проектов с этой ошибкой. Творческое применение шаблонов поиска, вероятно, может привести к появлению более разных типов ошибок.