एक्सेल डेट में चार साल का अंतर: सबसे पहले वर्कबुक डेट सिस्टम पर नजर डालें
iso_dates फ़ाइल में दिनांक क्रमांकन विधि को नियंत्रित करता है और स्वचालित रूप से मेमोरी में डेटाटाइम को स्ट्रिंग में नहीं बदलता है। दिनांक क्रमांक के लिए कार्यपुस्तिका के युग की आवश्यकता होती है; यहां हम दो दिनांक प्रणालियों की तुलना करते हैं और सहेजे गए XML और रीडबैक मानों की जांच करते हैं।
एक्सेल उन तारीखों को निर्यात करता है जो चार साल से ऑफसेट होती हैं, और ज्यादातर मामलों में समस्या कार्यपुस्तिका की तारीख प्रणाली के साथ होती है, न कि डेटा के साथ। रिपोर्ट निर्यात, ईटीएल स्क्रिप्ट, या एक्सेल फ़ाइलों के क्रॉस-प्लेटफ़ॉर्म एक्सचेंज के लिए ज़िम्मेदार डेवलपर्स और डेटा लोगों के लिए लिखा गया। जब आप समग्र तिथि परिवर्तन, संख्याएँ जिन्हें दिनांक के रूप में प्रदर्शित नहीं किया जा सकता, 1900 के आसपास डेटा विसंगतियाँ आदि जैसी स्थितियों का सामना करते हैं, तो आप पहले इस आलेख के क्रम में समस्या निवारण कर सकते हैं।
इस लेख को पढ़ने के बाद, आप 1900 और 1904 की दो दिनांक प्रणालियों के बीच अंतर को समझेंगे, जानेंगे कि वर्तमान कार्यपुस्तिका द्वारा उपयोग की जाने वाली प्रणाली की पुष्टि करने के लिए workbook.epoch को कैसे पढ़ा जाए, और XML की जाँच करने और सहेजने के बाद वापस मूल्यों को पढ़ने की स्वीकृति विधि में महारत हासिल की जाए। इस आलेख में कोड और तालिकाओं को सिंथेटिक नमूनों के साथ चित्रित किया गया है, जो वास्तविक दस्तावेजों के साथ काम करने से पहले एक चेकलिस्ट के रूप में उपयुक्त हैं।
यदि एक्सेल की तारीख चार साल अलग हो तो मुझे क्या करना चाहिए? एक वाक्य का निष्कर्ष
पहले कार्यपुस्तिका का workbook.epoch पढ़ें और परिवर्तित करने से पहले दिनांक प्रणाली की पुष्टि करें; सीमा तिथि और समय क्षेत्र के मुद्दों को अलग से संभाला जाता है।
| आपकी स्थिति | अनुशंसित प्रथाएँ | कारण |
|---|---|---|
| निर्यात की गई तारीख कुल मिलाकर लगभग 1462 दिन कम है | कार्यपुस्तिका दिनांक प्रणाली की पुष्टि करने के लिए पहले workbook.epoch पढ़ें | 1900 और 1904 सिस्टम के बीच का अंतर 1462 दिन है, और रीड साइड पर गलत धारणाओं के कारण सभी सीरियल नंबरों की गलत व्याख्या हो जाएगी |
| सेल एक संख्या है लेकिन इसे दिनांक के रूप में प्रदर्शित नहीं किया जा सकता | number_format दिनांक प्रारूप मास्क की जाँच करें और पूरा करें | जब संख्यात्मक प्रकार सही होता है, तो गुम प्रारूप प्रदर्शन असामान्यताओं का कारण बनेंगे। |
| डेटा में मार्च 1900 या 1900-02-29 से पहले की तारीखें दिखाई देती हैं | अमान्य या मैन्युअल समीक्षा में स्थानांतरित के रूप में चिह्नित करें, मूल क्रमांक बनाए रखें | यह तिथि ग्रेगोरियन कैलेंडर में मौजूद नहीं है और इसे परिवर्तित करने के लिए बाध्य नहीं किया जाना चाहिए |
समय क्षेत्र के साथ datetime लिखना होगा | UTC में एकीकृत रूपांतरण के बाद tzinfo को स्ट्रिप करें | एक्सेल समय क्षेत्रों को संग्रहीत करने का समर्थन नहीं करता है, जागरूकता के बिना सभी समय स्थानीय समय हैं |
| फ़ाइलों को विभिन्न प्लेटफार्मों पर आदान-प्रदान करने की आवश्यकता है | दिनांक प्रणाली को स्पष्ट रूप से घोषित करें | रिसीवर की डिफ़ॉल्ट सेटिंग्स भिन्न होती हैं, जो साइलेंट ऑफसेट उत्पन्न कर सकती हैं |
1900 और 1904 की तिथि प्रणालियों के बीच अंतर
XLSX फ़ाइल में एक तारीख अनिवार्य रूप से एक फ़्लोटिंग-पॉइंट सीरियल नंबर है, और इसका अर्थ पूरी तरह से उस दिनांक प्रणाली पर निर्भर करता है जिससे कार्यपुस्तिका जुड़ी हुई है। XLSX विनिर्देशन दो आधार युगों की अनुमति देता है:
- 1900 दिनांक प्रणाली: विंडोज़ द्वारा डिफ़ॉल्ट रूप से उपयोग किया जाता है, क्रमांक 1 1900-01-01 को दर्शाता है
- 1904 दिनांक प्रणाली: प्रारंभिक मैक पर डिफ़ॉल्ट रूप से उपयोग किया जाता है, क्रमांक 0 1904-01-01 को दर्शाता है
दोनों के बीच 1462 दिनों का एक निश्चित ऑफसेट है, जो "चार साल के तारीख अंतर" का मुख्य स्रोत है। इसके अलावा, 1900 प्रणाली में एक ऐतिहासिक समस्या है: यह गलत तरीके से 1900 को एक लीप वर्ष मानता है, जिसके कारण एक्सेल में गैर-मौजूद तारीख 1900-02-29 वैध हो गई है।
कोर तुलना
| परियोजना | 1900 दिनांक प्रणाली | 1904 दिनांक प्रणाली |
|---|---|---|
| सीरियल नंबर शुरुआती बिंदु | क्रम संख्या 1 1900-01-01 से मेल खाती है | क्रम संख्या 0 1904-01-01 से मेल खाती है |
| सामान्य डिफ़ॉल्ट स्रोत | Windows | प्रारंभिक मैक |
| किसी अन्य सिस्टम से ऑफसेट | 1,462 दिनों का अंतर | 1,462 दिनों का अंतर |
| विशेष अंक | गलती से 1900 को लीप वर्ष के रूप में गिनना 1900-02-29 को मौजूद है | यह लेख ऐसे मुद्दों को संबोधित नहीं करता है |
1900 साल दूर के डेटा के लिए विशेष सावधानी की आवश्यकता क्यों है
यदि आप मार्च 1900 से पहले के ऐतिहासिक डेटा के साथ काम कर रहे हैं, तो पायथन का datetime मॉड्यूल सीधे 29 फरवरी का प्रतिनिधित्व नहीं कर सकता है। आधिकारिक OpenPyxl प्रलेखन के अनुसार, एक्सेल व्यवहार का समर्थन करने के लिए, लाइब्रेरी 1900 सिस्टम पर जनवरी और फरवरी की तारीखों को पढ़ते समय इस अपवाद का अनुकरण करती है, लेकिन 1900-02-29 स्वयं इसे एक वैध पायथन datetime ऑब्जेक्ट में परिवर्तित नहीं कर सकता है।
अधिकांश आधुनिक व्यावसायिक डेटा के लिए, कुंजी यह पहचानना है कि वर्तमान कार्यपुस्तिका किस प्रणाली का उपयोग कर रही है और प्राप्तकर्ता पर विभिन्न डिफ़ॉल्ट सेटिंग्स के कारण होने वाले मूक ऑफ़सेट से बचने के लिए प्लेटफ़ॉर्म पर फ़ाइलों का आदान-प्रदान करते समय इसे स्पष्ट रूप से घोषित करें।
संश्लेषण उदाहरण: सीमा इनपुट और प्रसंस्करण विधियाँ
इस मुद्दे को स्पष्ट करने के लिए, आइए एक संश्लेषण परिदृश्य का निर्माण करें: एक वित्तीय प्रणाली 1904 की दिनांक प्रणाली का उपयोग करके रिपोर्ट निर्यात करती है, लेकिन डाउनस्ट्रीम ईटीएल स्क्रिप्ट 1900 सिस्टम को पार्स करने के लिए डिफ़ॉल्ट है।
त्रुटियों या सीमा इनपुट से निपटना:
- यदि आप क्रम संख्या 60 दर्ज करते हैं और कार्यपुस्तिका 1900 प्रणाली है, तो यह एक्सेल में काल्पनिक 1900-02-29 से मेल खाती है। मूल पायथन
datetimeValueErrorफेंकता है। - इस बिंदु पर, रूपांतरण को मजबूर न करें; इसके बजाय, विसंगति को कैप्चर करें और इसे मूल मान या विशेष मार्कर के रूप में रिकॉर्ड करें, क्योंकि ग्रेगोरियन कैलेंडर में तारीख मौजूद नहीं है।
- यदि टाइमज़ोन की जानकारी के साथ एक
datetimeऑब्जेक्ट पास किया जाता है और लिखा जाता है, तो openpyxl स्वचालित रूप से टाइमज़ोन को परिवर्तित नहीं करेगा, लेकिन पहले tzinfo को स्ट्रिप करेगा; अन्यथा, लिखने में त्रुटियां या त्रुटियां हो सकती हैं। - Excel स्वयं समय क्षेत्र भंडारण का समर्थन नहीं करता है; सभी समय अगोचर स्थानीय समय है।
दिनांक सिस्टम डिटेक्शन और सुरक्षा रूपांतरण कोड
निम्न उदाहरण प्रदर्शित करता है कि स्मृति में दिनांक सिस्टम अंतर को सुरक्षित रूप से कैसे संभालें। कोड केवल तार्किक प्रदर्शन के लिए है और वास्तव में फ़ाइलों को पढ़ता या लिखता नहीं है। इसे आपके स्वयं के लॉक किए गए निर्भरता वातावरण में चलाने की आवश्यकता है। Openpyxl >= 3.1.0 की अनुशंसा की जाती है। उदाहरण में नेटवर्क अनुरोध या फ़ाइल अधिलेखित संचालन शामिल नहीं हैं; सभी दावे सिंथेटिक डेटा पर आधारित हैं।
from datetime import datetime
from io import BytesIO
from zipfile import ZipFile
from openpyxl import Workbook, load_workbook
from openpyxl.utils.datetime import from_excel, CALENDAR_MAC_1904, CALENDAR_WINDOWS_1900
assert from_excel(1, CALENDAR_MAC_1904) == datetime(1904, 1, 2)
assert from_excel(1, CALENDAR_WINDOWS_1900) == datetime(1900, 1, 1)
wb = Workbook()
wb.epoch = CALENDAR_MAC_1904
wb.iso_dates = True
value = datetime(2026, 9, 26, 12, 30)
wb.active["A1"] = value
assert wb.active["A1"].value == value
out = BytesIO()
wb.save(out)
with ZipFile(BytesIO(out.getvalue())) as z:
xml = z.read("xl/worksheets/sheet1.xml")
assert b't="d"' in xml and b"2026-09-26T12:30:00" in xml
restored = load_workbook(BytesIO(out.getvalue()))
assert restored.active["A1"].value == value
assert restored.epoch == CALENDAR_MAC_1904
स्वीकृति मानदंड और मैन्युअल समीक्षा सीमाएँ
| घटना का निरीक्षण करें | इनपुट या सीमा की स्थिति | अपेक्षित आउटपुट या प्रसंस्करण निर्णय | क्या स्वचालन उपयुक्त है |
|---|---|---|---|
| सभी तिथियों को 1462 दिनों तक समान रूप से ऑफसेट किया जाता है | wb.epoch विश्लेषणात्मक धारणा से मेल नहीं खाता है | wb.epoch पढ़ने के बाद, सीरियल नंबर को फिर से बदलें | हाँ |
| 1900-02-29 डेटा में दिखाई दिया | 1900 सीरियल नंबर 60 के साथ सिस्टम | मूल क्रम संख्या 60 को बनाए रखते हुए, एक अमान्य तिथि के रूप में चिह्नित करें | नहीं, व्यवसाय के अर्थ की पुष्टि मैन्युअल रूप से की जानी चाहिए |
| समय आंशिक रूप से खो गया है या गलत संरेखित है | Tzinfo के साथ datetime दर्ज करें | समान रूप से UTC में परिवर्तित होने के बाद, tzinfo को छीन लिया जाता है और फिर से लिखा जाता है | कुछ को लक्ष्य समय क्षेत्र को मैन्युअल रूप से परिभाषित करने की आवश्यकता होती है |
| कक्ष संख्याएँ प्रदर्शित करते हैं लेकिन दिनांकों के स्वरूप में होते हैं | मान प्रकार सही है लेकिन number_format गायब है | दिनांक प्रारूप मास्क की जाँच करें और पूरा करें | हाँ |
| ऐतिहासिक तिथियां (1900-01-01 से पहले) विसंगतियों को दर्शाती हैं | 1900-01-01 से पहले की तिथि | पाठ संग्रहण या समर्पित ऐतिहासिक डेटाबेस पर स्विच करें | नहीं, XLSX इस परिदृश्य के लिए उपयुक्त नहीं है |
ध्यान दें कि कोड प्रदर्शन केवल रूपांतरण तर्क की शुद्धता की पुष्टि करता है और एंड-टू-एंड प्रभाव का प्रतिनिधित्व नहीं करता है। वास्तविक फ़ाइलें कई दिनांक प्रारूपों, सशर्त प्रारूपों या सूत्रों द्वारा उत्पन्न तिथियों को मिला सकती हैं, जिनमें से सभी को पार्सिंग की अतिरिक्त परतों की आवश्यकता होती है। मार्च 1900 से पहले की तारीखों का सामना करते समय, क्रॉस-टाइम ज़ोन सहयोग डेटा, या गैर-मानक कैलेंडर (जैसे चंद्र या वित्तीय वर्ष), मैन्युअल समीक्षा प्रक्रियाओं का उपयोग किया जाना चाहिए, और स्वचालित स्क्रिप्ट को मनमाने ढंग से संशोधित नहीं किया जाना चाहिए।
🎯 कौन सा तरीका आपको सूट करता है?
यदि आपको निर्यात फ़ाइल से दिनांक पढ़ने की आवश्यकता है
सबसे पहले, workbook.epoch पढ़ें, दिनांक प्रणाली की पुष्टि करें, और फिर तय करें कि सीरियल नंबर को फिर से बदलना है या नहीं।
यदि आपके डेटा में मार्च 1900 से पहले की तारीखें शामिल हैं
1900-02-29 से संबंधित रिकॉर्ड को अमान्य के रूप में चिह्नित करें, मूल सीरियल नंबर रखें, और व्यावसायिक अर्थ की पुष्टि करने के लिए इसे एक मैनुअल को सौंप दें।
यदि आपको एक्सेल में समय क्षेत्र के साथ समय लिखने की आवश्यकता है
सबसे पहले, समान रूप से UTC में कनवर्ट करें, फिर tzinfo को स्ट्रिप करें; लक्ष्य समय क्षेत्र को मैन्युअल रूप से परिभाषित करने की आवश्यकता है।
यदि आप अन्य प्रणालियों के साथ फ़ाइलों का आदान-प्रदान करना चाहते हैं
स्पष्ट रूप से दिनांक प्रणाली की घोषणा करता है, और प्राप्त करने वाले छोर पर वापस पढ़े जाने वाले दिनांक मान की पुष्टि करता है।
❓ अक्सर पूछे जाने वाले प्रश्न (FAQ)
1. निर्यात की तारीख लगभग चार साल क्यों बदल दी गई है?
एक सामान्य कारण यह है कि कार्यपुस्तिका की तिथि प्रणाली पढ़ने के पक्ष की धारणाओं से असंगत है। 1900 और 1904 की दोनों प्रणालियों के बीच का अंतर 1462 दिन है।
2. क्या iso_dates स्वचालित रूप से डेटाटाइम को एक स्ट्रिंग में बदल देगा?
नहीं। iso_dates केवल फ़ाइल में दिनांक क्रमांकन विधि को नियंत्रित करता है और स्वचालित रूप से datetime को मेमोरी में स्ट्रिंग में परिवर्तित नहीं करता है।
3. 1900-02-29 को पायथन डेटटाइम में क्यों नहीं बदला जा सकता है?
1900 प्रणाली गलती से 1900 को एक लीप वर्ष के रूप में मानती है, जिससे 1900-02-29 एक्सेल में मौजूद है लेकिन ग्रेगोरियन कैलेंडर में नहीं। पायथन का datetime ValueError फेंक देगा, जिसे मूल मूल्य या विशेष टैग रिकॉर्ड करना चाहिए।
4. आपको एक्सेल में समय क्षेत्र के साथ डेटटाइम कैसे लिखना चाहिए?
Excel समय क्षेत्र संग्रहीत करने का समर्थन नहीं करता है. इसे पहले समान रूप से यूटीसी में परिवर्तित किया जाना चाहिए, फिर लिखने से पहले tzinfo को हटा दिया जाना चाहिए; openpyxl स्वचालित रूप से समय क्षेत्र रूपांतरण पूरा नहीं करेगा।
📝सारांश
दिनांक ऑफसेट समस्याएँ आमतौर पर कार्यपुस्तिका की दिनांक प्रणाली से उत्पन्न होती हैं। कनवर्ट करने से पहले workbook.epoch की पुष्टि करने से अधिकांश मौन त्रुटियों से बचा जा सकता है। सीमा तिथि और समय क्षेत्र के मुद्दों को मानवीय समीक्षा के लिए भेजा जाना चाहिए।
अभी अनुभव करें: मूल स्वरूपण को संरक्षित करते हुए अनुवाद शुरू करने के लिए अपना दस्तावेज़ अपलोड करें
संदर्भ और अगले चरण
- openpyxl आधिकारिक दिनांक और समय दस्तावेज़ीकरण: https://openpyxl.readthedocs.io/en/stable/datetime.html
- 1900/1904 दिनांक प्रणाली पर माइक्रोसॉफ्ट का नोट: https://docs.microsoft.com/en-us/office/troubleshoot/excel/1900-and-1904-date-system
- 1900 लीप वर्ष बग का माइक्रोसॉफ्ट स्पष्टीकरण: https://docs.microsoft.com/en-us/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year
अगला: एक चिंतित एक्सेल नमूने का चयन करें जिस तक आपकी पहुंच है, उपरोक्त युग का पता लगाने वाला कोड चलाएं, और पुष्टि करें कि क्या इसकी दिनांक प्रणाली आपके प्रसंस्करण तर्क से मेल खाती है। यदि विसंगतियां पाई जाती हैं, तो अनुवादित वितरण योग्य जनरेट करने से पहले रूपांतरण पैरामीटर समायोजित करें।
दस्तावेज़ अनुवाद के लिए इस चेकलिस्ट का उपयोग करें
पहले तय करें कि कौन सी सामग्री टेक्स्ट है, कौन सी फॉर्मूला और बिजनेस कोडिंग है, और फिर तालिका का अनुवाद करें। अनुवाद के बाद की जाँच न केवल यह पुष्टि करती है कि क्या चीनी को लक्ष्य भाषा में परिवर्तित किया गया है, बल्कि यह भी पुष्टि करता है कि सूत्र, पहचानकर्ता और संदर्भ संबंध नहीं बदले गए हैं।
ओमनीडॉक (उत्पाद प्रविष्टि) बहु-प्रारूप दस्तावेज़ अनुवाद पोर्टल प्रदान करता है, और इसकी आधिकारिक वेबसाइट OCR, शब्दावली और द्विभाषी संदर्भ सुविधाएँ पेश करती है। उन टीमों के लिए जो सीधे फाइलों से शुरू करना चाहती हैं, यह वास्तविक नमूनों के साथ मूल्यांकन के लायक पथ है। कृपया उस अनाम फ़ाइल का उपयोग करें जिसे आपने अपलोड करने और इस आलेख में चेकलिस्ट के साथ परिणामों को सत्यापित करने के लिए अधिकृत किया है। यह लेख यह दावा नहीं करता है कि ओमनीडॉक लेख में उल्लिखित ओपन-सोर्स लाइब्रेरी या आंतरिक एल्गोरिदम का उपयोग करता है, न ही यह उदाहरण के साथ उत्पाद प्रदर्शन परीक्षण को प्रतिस्थापित करता है।


