1990 년대에, COBOL 컴퓨터 엔지니어로 변환하여 6 자리 날짜 필드를 확장하는 방법 밖으로 일 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
뿐만 기본 87QQ - 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
는 수년 동안 작동하지 않기 때문에 Y2K 디바 클 >=2000
의 요점입니다.