문제
2010 년을 이해하지 못하는 시스템에 대한 많은 보고서가 있지만 그 이유는 모르겠습니다. 내가보고있는 현재 시스템은 내가 알 수있는 한 잘 작동하지만 실제 문제가 더 잘 검색하는 것이 무엇인지 알고 싶습니다.
누구든지 약간의 빛을 발할 수 있습니까?
편집하다: http://www.rte.ie/business/2010/0105/bug.html - 독일의 신용 카드에 영향을 미치는 정보
해결책
은행 및 통신에 사용되는 몇 가지 프로토콜 -SMS 프로토콜 포함 - 연도를 인코딩하십시오 BCD 단일 바이트에서.
2000-2009 년부터 인코딩이 동일하기 때문에 올해를 표준 바이너리 숫자로 해석하는 실수를 쉽게 할 수 있습니다.
Encoding Binary-interpreted BCD-interpreted
0x01 2001 2001
0x02 2002 2002
...
0x09 2009 2009
0x10 2016 2010
...
이것이 아마도 Windows 모바일 버그의 원인 일 것입니다.
다른 팁
가능한 설명 중 하나는 아래 기사에 있습니다
http://www.theeregister.co.uk/2010/01/05/symantec_y2k10_bug/
저렴하고 더러운 Y2K 버그 수정에 대한 최근 기사를 상기시켜줍니다. 일부 부도덕 한 프로그래머가 <10 = 20xx 인 경우 간단한 경우 날짜가 19xx입니다.
Spamassassin은 미래에 Spam과 같이 날짜를 너무 멀리 표시하는 규칙을 가졌습니다.
/20[1-9][0-9]/
수정은 며칠이 너무 늦었지만 아주 간단합니다.
/20[2-9][0-9]/
10 년 후에 다시 뵙겠습니다.
1 자리 연도 필드를 사용하는 시스템이 있습니다. 예. 한 자리. 따라서이 시스템이 실패한 이유는 "2000"이 "2010"과 동일하게 표현되기 때문입니다.
내가 들었던 것은 사람들이 Y2K를 위해 한 빠른 수정이었습니다. 따라서 xx <10이면 20xx else 19xx.
Y2K 이후 경력을 시작하고 연도를 대표하기 위해 1 자리를 사용하는 젊은 개발자 때문일 수 있습니다.
나는 지난 주말에 사이트에서 작은 2010 년 실패를 처리했는데, 코딩의 감독의 결과 일뿐입니다.
누군가 목록에 2009 년까지 항목이 포함 된 경우 목록 항목의 값을 현재 DateTime.now.now ()로 설정하는 것이 좋습니다.
ddlItem.findByText(DateTime.Now.Year.ToString())
다음은 Norton Symantec Endpoint Protection의 스크린 샷입니다.
Alt Text http://img695.imageshack.us/img695/4500/152010112800am.jpg
@ Symantec이 고객에게 알리지 않아서 정말 좋습니다. 기사가 게시 될 때까지 : http://www.theeregister.co.uk/2010/01/05/symantec_y2k10_bug/
구성 요소에는 올해를 두 부분으로 나누는 버그가 있습니다. 두 번째 부분은 숫자 10이 기본 10에 있지 않도록 비교에서 사용되며, 기본 16에있는 것은 0x10 = 16 (16 진)임을 의미합니다.
Google 코드 검색을 사용했습니다 오픈 소스 소프트웨어에서 Y2010 버그를 찾으십시오. 버그 ( "200%d"를 Printf 형식 문자열로 사용)를 나타내는 특정 패턴을 찾았으며 해당 버그가있는 여러 프로젝트를 찾았습니다. 검색 패턴을 창의적으로 적용하면 더 많은 종류의 버그가 발생할 수 있습니다.