ในปี 1990 วิศวกรคอมพิวเตอร์ COBOL ทำงานออกวิธีการขยายหกหลักฟิลด์วันโดยการแปลงพวกเขาไปยังYYYDDD
สถานที่ที่YYY
เป็นyear - 1900
และเป็นวันของปีDDD
โครงการนี้อาจขยายวันสูงสุดที่จะ[001 to 366]
2899-12-31
ในปี 2898 วิศวกรเริ่มตื่นตระหนกเนื่องจากรหัสฐาน 900 ปีของพวกเขากำลังจะล้มเหลว ตั้งแต่ปี 2898 พวกเขาใช้เครื่องย้อนเวลาเพื่อส่ง Codeinator ที่โดดเดี่ยวไปยังปี 1998 ด้วยอัลกอริธึมนี้
ใช้โครงการ
PPQQRR
ซึ่งถ้า01 ≤ QQ ≤ 12
แล้วมันเป็นมาตรฐานYYMMDD
วันในปี 1900 แต่ถ้าQQ > 12
แล้วมันหมายถึงวันหลังจากที่2000-01-01
ในฐาน 100PP
และRR
แต่ฐานQQ - 13
87
โครงการนี้ขยายออกไปไกลเกินกว่าปี 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