Pada 1990-an, insinyur komputer COBOL menemukan cara untuk memperluas bidang tanggal enam digit dengan mengonversinya ke YYYDDDtempat YYYadalah year - 1900dan DDDmerupakan hari dalam setahun [001 to 366]. Skema ini dapat memperpanjang tanggal maksimum ke 2899-12-31.
Pada tahun 2898, para insinyur mulai panik karena basis kode 900 tahun mereka akan gagal. Dari tahun 2898, mereka hanya menggunakan mesin waktu mereka untuk mengirim Codeinator sendiri ke tahun 1998 dengan algoritma ini dan tugas untuk mengimplementasikannya seluas mungkin:
Gunakan skema di
PPQQRRmana jika01 ≤ QQ ≤ 12maka itu adalahYYMMDDtanggal standar di tahun 1900-an, tetapi jikaQQ > 12kemudian itu mewakili hari-hari setelahnya2000-01-01di basis 100 untukPPdanRRtetapi basis 87 untukQQ - 13.
Skema ini melampaui tahun 2899 dan juga kompatibel dengan tanggal standar, jadi tidak diperlukan modifikasi arsip yang ada.
Beberapa contoh:
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
Tantangan Anda adalah menulis program atau fungsi untuk menerima input sebagai PPQQRRdan output sebagai tanggal ISO YYYY-MM-DD. Metode input dapat berupa parameter, konsol atau baris perintah, apa pun yang termudah.
Untuk hiburan Anda, berikut adalah solusi tidak bersaing di 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.
yymmddtidak berfungsi selama bertahun-tahun >=2000, itulah inti dari bencana Y2K.
yyyy-mm-ddformat ISO .