У 1990 - х роках, COBOL комп'ютерні інженери розробили спосіб продовжити шість цифр порожнистої дати шляхом перетворення їх в YYYDDD
де YYY
це year - 1900
і DDD
є день року [001 to 366]
. Ця схема може продовжити максимальну дату до 2899-12-31
.
У 2898 році інженери почали панікувати, оскільки їхні 900-річні бази кодів зазнали збою. Починаючи з 2898 року, вони просто використовували свою машину часу, щоб надіслати самотній кодифікатор до 1998 року за допомогою цього алгоритму та завдання максимально широко його реалізувати:
Використовуйте схему ,
PPQQRR
де , якщо01 ≤ QQ ≤ 12
тоді це стандартнаYYMMDD
дата в 1900 - х роках, але якщоQQ > 12
тоді вона являє дні після того, як2000-01-01
в базі 100 дляPP
і ,RR
крім підстави 87 дляQQ - 13
.
Ця схема поширюється далеко на 2899 рік, а також сумісна з типовими датами, тому не потрібно змінювати існуючі архіви.
Деякі приклади:
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
Ваше завдання полягає в тому, щоб написати програму або функцію, щоб прийняти введення як PPQQRR
і вихід як дату ISO YYYY-MM-DD
. Метод введення може бути параметром, консоллю або командним рядком, будь-який найпростіший.
Для вашого розваги, ось рішення, яке конкурує з конкуренцією в 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
він не працює роками >=2000
, у цьому вся суть дебала Y2K.
yyyy-mm-dd
форматі ISO .