Pada 1990-an, insinyur komputer COBOL menemukan cara untuk memperluas bidang tanggal enam digit dengan mengonversinya ke YYYDDD
tempat YYY
adalah year - 1900
dan DDD
merupakan 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
PPQQRR
mana jika01 ≤ QQ ≤ 12
maka itu adalahYYMMDD
tanggal standar di tahun 1900-an, tetapi jikaQQ > 12
kemudian itu mewakili hari-hari setelahnya2000-01-01
di basis 100 untukPP
danRR
tetapi 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 PPQQRR
dan 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.
yymmdd
tidak berfungsi selama bertahun-tahun >=2000
, itulah inti dari bencana Y2K.
yyyy-mm-dd
format ISO .