Trong những năm 1990, COBOL kỹ sư máy tính làm việc ra một cách để mở rộng trường ngày sáu chữ số bằng cách chuyển đổi chúng sang YYYDDDnơi YYYlà year - 1900và DDDlà ngày trong năm [001 to 366]. Chương trình này có thể kéo dài ngày tối đa đến 2899-12-31.
Vào năm 2898, các kỹ sư bắt đầu hoảng loạn vì cơ sở mã 900 năm tuổi của họ sẽ thất bại. Từ năm 2898, họ chỉ sử dụng cỗ máy thời gian của mình để gửi một Codeinator đơn độc đến năm 1998 với thuật toán này và nhiệm vụ khiến nó được triển khai rộng rãi nhất có thể:
Sử dụng một lược đồ
PPQQRRtrong đó nếu01 ≤ QQ ≤ 12đó là mộtYYMMDDngày tiêu chuẩn vào những năm 1900, nhưng nếuQQ > 12sau đó nó đại diện cho những ngày sau2000-01-01trong cơ sở 100 choPPvàRRnhưng cơ sở 87 choQQ - 13.
Chương trình này mở rộng ra xa hơn năm 2899 và cũng tương thích ngược với ngày tiêu chuẩn, do đó không cần sửa đổi tài liệu lưu trữ hiện có.
Vài ví dụ:
PPQQRR YYYY-MM-DD
000101 1900-01-01 -- minimum conventional date suggested by J. Allen
010101 1901-01-01 -- edge case suggested by J. Allen
681231 1968-12-31 -- as above
991231 1999-12-31 -- maximum conventional date
001300 2000-01-01 -- zero days after 2000-01-01
008059 2018-07-04 -- current date
378118 2899-12-31 -- maximum date using YYYDDD scheme
999999 4381-12-23 -- maximum date using PPQQRR scheme
Thách thức của bạn là viết một chương trình hoặc chức năng để chấp nhận đầu vào PPQQRRvà đầu ra dưới dạng ngày ISO YYYY-MM-DD. Phương thức nhập liệu có thể là tham số, bàn điều khiển hoặc dòng lệnh, bất cứ điều gì là dễ nhất.
Để bạn giải trí, đây là một giải pháp không thể lọc trong COBOL-85:
IDENTIFICATION DIVISION.
PROGRAM-ID. DATE-CONVERSION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 T PIC 9(8).
01 U PIC 9(8).
01 D VALUE '999999'.
05 P PIC 9(2).
05 Q PIC 9(2).
05 R PIC 9(2).
01 F.
05 Y PIC 9(4).
05 M PIC 9(2).
05 D PIC 9(2).
PROCEDURE DIVISION.
IF Q OF D > 12 THEN
MOVE FUNCTION INTEGER-OF-DATE(20000101) TO T
COMPUTE U = R OF D + 100 * ((Q OF D - 13) + 87 * P OF D) + T
MOVE FUNCTION DATE-OF-INTEGER(U) TO F
DISPLAY "Date: " Y OF F "-" M OF F "-" D OF F
ELSE
DISPLAY "Date: 19" P OF D "-" Q OF D "-" R OF D
END-IF.
STOP RUN.
yymmddkhông hoạt động trong nhiều năm >=2000, đó là toàn bộ vấn đề của sự kiện Y2K.
yyyy-mm-ddđịnh dạng ISO .