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
लेकिन के लिए आधार 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
आईएसओ तिथि के रूप में इनपुट और आउटपुट को स्वीकार करने के लिए एक कार्यक्रम या फ़ंक्शन लिखना है 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
प्रारूप में होना चाहिए ।