2010-01-05 51 views
18

Có rất nhiều báo cáo về các hệ thống không hiểu được năm 2010 nhưng tôi không biết tại sao. Các hệ thống hiện tại mà tôi trông nom đang hoạt động tốt như tôi có thể nói nhưng tôi muốn biết vấn đề thực tế là tìm kiếm tốt hơn.Điều gì gây ra lỗi 2010?

Có ai có thể làm sáng tỏ không?

Edit: http://www.rte.ie/business/2010/0105/bug.html - Thông tin về nó ảnh hưởng đến thẻ tín dụng ở Đức

+3

Oh dear, that awfully vague. Bạn có bất kỳ liên kết nào để chia sẻ không? –

+0

Tôi đã nghe điều gì đó về việc giải thích '10' là số thập lục phân. – Gumbo

+15

Nó chỉ là sự chuẩn bị cho ngày tận thế 2012. –

Trả lời

13

Một số giao thức được sử dụng trong ngân hàng và viễn thông - including the SMS protocol - mã hóa năm là BCD trong một byte đơn.

Từ 2000-2009 người ta có thể dễ dàng mắc sai lầm khi giải thích năm nay như một số nhị phân chuẩn kể từ khi mã hóa sẽ là như nhau:

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

Đó có lẽ là hầu hết nguyên nhân của lỗi Windows Mobile.

4

Tôi đã có một hệ thống tại nơi làm việc có sử dụng một cánh đồng năm một chữ số. Vâng. Một chữ số. Vì vậy, lý do hệ thống này là thất bại là "2000" được thể hiện giống như "2010".

+4

Có/không có bất kỳ loại lý do nào cho quyết định đó? – Paolo

+0

Tôi không có ý tưởng, và không có cách thực sự để tìm ra. – recursive

+11

"Chúng tôi sẽ không bao giờ sử dụng phần mềm này 10 năm kể từ bây giờ". –

4

Tôi nghe nói về những sửa chữa nhanh mà mọi người đã làm cho Y2K mà không cần suy nghĩ kỹ. Vì vậy, nếu xx < 10 thì 20xx khác 19xx.

+1

Không thực sự exaplain 16 –

+1

16 từ đâu đến? Câu hỏi chỉ hỏi về các hệ thống không hiểu được. 0x10 = 16 có thể là một lý do, chắc chắn. –

+0

Lỗi 2010 - 2016 có thể không phải là lỗi duy nhất ở đây ... Điều này rất có thể giải thích được vấn đề mà các ngân hàng Đức đang gặp phải. –

13

Một cách giải thích có thể là trong bài viết dưới đây

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

Nhắc tôi về bài viết gần đây của bạn về các bản sửa lỗi Y2K lỗi giá rẻ và bẩn, nơi một số lập trình viên vô đạo đức đặt trong một đơn giản nếu < 10 = 20XX khác ngày là 19xx

+0

Vâng, tôi nghĩ bạn đã đóng đinh nó. –

+0

Windows, hiện tại, có cùng một thứ. Hai chữ số năm được biểu diễn dưới dạng một ngày trong khoảng từ năm 1930 đến năm 2029. Điều này tạo nên mã 'if <30 = 20xx nếu không ngày tháng là 19xx'. Việc sửa chữa là để cướp người, sẵn sàng, sử dụng 2 chữ số năm (bao gồm cả người dùng cuối) –

11

Thư rác có quy tắc đánh dấu ngày quá xa trong tương lai là spam:

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

Việc sửa chữa đến một vài ngày quá muộn, nhưng nó khá đơn giản:

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

Hẹn gặp lại trong mười năm.

+2

Đầu tiên tôi mặc dù bạn phải đùa. Nhưng sau đó tôi đã kiểm tra https://issues.apache.org/SpamAssassin/show_bug.cgi?id=6269. Không quá khó để tôi so sánh hai số nguyên 4 chữ số với nhau. Tại sao họ sử dụng cụm từ thông dụng cho điều đó? –

+14

Bởi vì mọi người đều biết rằng, nếu bạn không thể diễn tả nó trong Regex, nó không đáng làm ...;) – GalacticCowboy

+0

Có thể tránh chuỗi chuyển đổi số nguyên không? –

4

Có thể là do các nhà phát triển trẻ đã bắt đầu sự nghiệp của họ sau Y2K và đang sử dụng 1 chữ số để đại diện cho năm.

+2

Điều này không phải là đặc điểm của một nhà phát triển cũ hơn, người có nhiều kinh nghiệm hơn (a) giảm thiểu các đại diện này và (b) phát triển các hệ thống mà điều này có nhiều khả năng xảy ra hơn? –

+2

Hoặc có thể là các chuyên gia tư vấn của Y2K, những người không kiếm đủ tiền để nghỉ hưu :) –

4

Tôi đã chăm sóc một chút 2010 thất bại trong một trang web cuối tuần trước, nó chỉ là kết quả của một sự giám sát trong mã hóa mặc dù.

Có người nghĩ rằng nó sẽ là một ý tưởng tốt để thiết lập giá trị của một mục trong danh sách đến dateTime.year.Now hiện tại() khi danh sách chỉ chứa các mặt hàng lên đến 2009.

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

Đó là lỗi trong một thành phần chia tách năm thành hai phần. Phần thứ hai được sử dụng trong so sánh sao cho chữ số 10 không nằm trong cơ số 10, nó nằm trong cơ sở 16 có nghĩa là nó là 0x10 = 16 (hex).

2

Tôi đã sử dụng Google Code Search để find y2010 bugs in open source software. Tôi tìm kiếm một mô hình cụ thể có thể chỉ ra một lỗi (sử dụng "200% d" như là một chuỗi định dạng printf), và tìm thấy một số dự án với lỗi đó. Ứng dụng sáng tạo của các mẫu tìm kiếm có thể có thể xuất hiện nhiều loại lỗi khác nhau.

Các vấn đề liên quan