सवाल डेलाइट सेविंग टाइम और टाइम ज़ोन सर्वोत्तम प्रथाओं [बंद]


मैं इस प्रश्न को और उत्तर के जवाब को डेलाइट सेविंग टाइम से निपटने के लिए निश्चित मार्गदर्शिका बनाने की उम्मीद कर रहा हूं, विशेष रूप से वास्तविक परिवर्तन ओवरों से निपटने के लिए।

यदि आपके पास जोड़ने के लिए कुछ भी है, तो कृपया करें

कई प्रणालियां सटीक समय रखने पर निर्भर होती हैं, समस्या डेलाइट बचत के कारण समय में परिवर्तन के साथ होती है - घड़ी को आगे या पीछे की ओर ले जाती है।

उदाहरण के लिए, किसी ऑर्डर लेने वाले सिस्टम में व्यवसाय नियम होते हैं जो आदेश के समय पर निर्भर करते हैं - यदि घड़ी बदलती है, तो नियम स्पष्ट नहीं हो सकते हैं। आदेश का समय कैसे जारी रखा जाना चाहिए? निश्चित रूप से अंतहीन परिदृश्य हैं - यह केवल एक उदाहरण है।

  • आपने डेलाइट सेविंग इश्यू के साथ कैसे निपटाया है?
  • आपके समाधान का क्या अनुमान है? (यहां संदर्भ की तलाश है)

महत्वपूर्ण के रूप में, यदि अधिक नहीं तो:

  • आपने क्या प्रयास किया जो काम नहीं करता?
  • यह क्यों काम नहीं किया?

मुझे प्रोग्रामिंग, ओएस, डेटा दृढ़ता और इस मुद्दे के अन्य प्रासंगिक पहलुओं में दिलचस्पी होगी।

सामान्य उत्तर बहुत अच्छे होते हैं, लेकिन मैं विवरण देखना भी पसंद करूंगा, खासकर यदि वे केवल एक मंच पर उपलब्ध हैं।


1886


मूल


@abatishchev - इस तरह से GETDATE() एसक्यूएल पर यूटीसी होगा (जैसा होगा DateTime.Now)। और सर्वर किसी भी प्रकार के स्वचालित डीएसटी परिवर्तनों से प्रभावित नहीं होगा। - Oded
@ ओडेड: अगर "सर्वर पर" जोड़ा जाएगा तो मैं सहमत हूं। लेकिन फिर भी वह स्थानीय अनुप्रयोगों की आवश्यकता वाले अन्य अनुप्रयोगों को प्रभावित कर सकता है। इस और अन्य कारणों से मुझे लगता है कि यूटीसी समय का स्पष्ट रूप से अनुरोध करना बेहतर है। - abatishchev
यूटीसी को जीएमटी को प्राथमिकता दी जाती है, क्योंकि यह अधिक सटीक रूप से परिभाषित है और क्योंकि कुछ ऑपरेटिंग सिस्टम पर जीएमटी परिभाषाएं गड़बड़ी कर रही हैं। लोगों के लिए "जीएमटी" और "यूटीसी" शब्दों को अदला-बदली करने के लिए आम बात है लेकिन वे पूरी तरह से नहीं हैं। लगभग किसी भी सॉफ्टवेयर / सिस्टम उद्देश्य के लिए, यूटीसी का उपयोग करें। देख stackoverflow.com/questions/2292334/... - Chris Johnson
@ जोशस्टोडोला - जॉन स्कीट की 'उत्तर'। - Kenny Evitt
@ ओडेड आप यह नहीं मान सकते कि सर्वर यूटीसी पर होगा, मैंने उत्पादन सर्वर देखे हैं जहां टाइमज़ोन "यूटीसी" था लेकिन डीएसटी लागू था इसलिए वास्तव में यूटीसी + 1 साल के आधे से अधिक था। @Abatishchev के साथ स्पष्ट और उपयोग करने के लिए सहमत हैं DateTime.UtcNow तथा GETUTCDATE(), यह अन्य देवताओं को भी दिखाता है जिन्हें आपने वास्तव में इसके बारे में सोचा है - ono2012


जवाब:



उत्तरों और अन्य डेटा का सारांश: (कृपया अपना जोड़ें)

कर:

  • जब भी आप समय पर एक सटीक पल का जिक्र कर रहे हों, उस समय एक एकीकृत मानक के अनुसार बने रहें जो डेलाइट बचत से प्रभावित न हो। (जीएमटी और यूटीसी इस संबंध के बराबर हैं, लेकिन यूटीसी शब्द का उपयोग करना पसंद है। ध्यान दें कि यूटीसी को भी जाना जाता है ज़ुलु या जेड पहर।)
  • यदि आप स्थानीय समय मूल्य का उपयोग करके एक समय बनी रहना चुनते हैं, तो यूटीसी से इस विशेष समय के लिए स्थानीय समय ऑफसेट शामिल करें (यह ऑफ़सेट पूरे साल बदल सकता है), जैसे टाइमस्टैम्प को बाद में अनजाने में व्याख्या किया जा सकता है।
  • कुछ मामलों में, आपको स्टोर करने की आवश्यकता हो सकती है दोनों यूटीसी समय और समकक्ष स्थानीय समय। अक्सर यह दो अलग-अलग क्षेत्रों के साथ किया जाता है, लेकिन कुछ प्लेटफॉर्म एक का समर्थन करते हैं datetimeoffset टाइप करें जो दोनों को एक ही फ़ील्ड में स्टोर कर सकता है।
  • टाइमस्टैम्प को संख्यात्मक मान के रूप में संग्रहीत करते समय, उपयोग करें यूनिक्स समय - जो पूरे सेकंड की संख्या है 1970-01-01T00:00:00Z (लीप सेकंड को छोड़कर)। यदि आपको उच्च परिशुद्धता की आवश्यकता है, तो इसके बजाय मिलीसेकंड का उपयोग करें। यह मान हमेशा यूटीसी पर आधारित होना चाहिए, बिना किसी समय क्षेत्र समायोजन के।
  • यदि आपको बाद में टाइमस्टैम्प को संशोधित करने की आवश्यकता हो सकती है, तो मूल समय क्षेत्र आईडी शामिल करें ताकि आप यह निर्धारित कर सकें कि ऑफ़सेट मूल मूल्य से बदला गया हो या नहीं।
  • भविष्य की घटनाओं को शेड्यूल करते समय, आमतौर पर यूटीसी के बजाय स्थानीय समय को प्राथमिकता दी जाती है, क्योंकि ऑफ़सेट बदलने के लिए यह आम बात है। उत्तर देखो, तथा ब्लॉग पोस्ट
  • जन्मदिन और सालगिरह जैसे पूरे तिथियों को संग्रहीत करते समय, यूटीसी या किसी अन्य समय क्षेत्र में परिवर्तित न करें।
    • जब संभव हो, तो केवल दिनांक डेटा में स्टोर करें जिसमें दिन का समय शामिल न हो।
    • यदि ऐसा कोई प्रकार उपलब्ध नहीं है, तो मूल्य की व्याख्या करते समय हमेशा समय-समय पर अनदेखा करना सुनिश्चित करें। यदि आपको आश्वस्त नहीं किया जा सकता कि समय-समय पर अनदेखा किया जाएगा, उस दिन 00:00 आधी रात के बजाय 12:00 दोपहर का चयन करें, उस दिन एक अधिक सुरक्षित प्रतिनिधि समय के रूप में।
  • याद रखें कि समय क्षेत्र ऑफसेट हमेशा एक पूर्णांक संख्या नहीं होते हैं (उदाहरण के लिए, भारतीय मानक समय यूटीसी + 05: 30 है, और नेपाल यूटीसी + 05: 45 का उपयोग करता है)।
  • यदि जावा का उपयोग करते हैं, तो प्रयोग करें java.time जावा 8 के लिए, या उपयोग करें जोदा समय जावा 7 या उससे कम के लिए।
  • अगर उपयोग कर रहे हैं नेट, उपयोग करने पर विचार करें नोडा समय
  • यदि नोडा समय के बिना .NET का उपयोग करते हैं, तो उस पर विचार करें DateTimeOffset अक्सर से बेहतर विकल्प है DateTime
  • यदि पर्ल का उपयोग करते हैं, तो उपयोग करें दिनांक समय
  • यदि पायथन का उपयोग करते हैं, तो उपयोग करें pytz या dateutil
  • यदि जावास्क्रिप्ट का उपयोग करते हैं, तो प्रयोग करें moment.js उसके साथ पल-समय क्षेत्र विस्तार।
  • यदि PHP> 5.2 का उपयोग करते हैं, तो मूल समय क्षेत्र रूपांतरणों का उपयोग करें DateTime, तथा DateTimeZone कक्षाएं। उपयोग करते समय सावधान रहें DateTimeZone::listAbbreviations() - उत्तर देखो। PHP को अद्यतित ओलसन डेटा रखने के लिए, समय-समय पर इंस्टॉल करें टाइमज़ोनब पीईसीएल पैकेज; उत्तर देखो
  • यदि सी ++ का उपयोग करते हैं, तो उस लाइब्रेरी का उपयोग करना सुनिश्चित करें जो उचित रूप से लागू करता है आईएएनए टाइमज़ोन डेटाबेस। इसमें शामिल है cctz, आईसीयू, तथा हॉवर्ड हिन्नेंट की "टीजे" लाइब्रेरी
    • प्रयोग नहीं करें बढ़ावा समय क्षेत्र रूपांतरण के लिए। जबकि इसकी एपीआई मानक आईएएनए (उर्फ "जोनिनोफो") पहचानकर्ताओं का समर्थन करने का दावा करता है क्रूरता से उन्हें नक्शे प्रत्येक क्षेत्र में परिवर्तन के समृद्ध इतिहास पर विचार किए बिना, POSIX- शैली डेटा तक। (साथ ही, फ़ाइल रखरखाव से बाहर हो गई है।)
  • अधिकांश व्यापार नियम यूटीसी या जीएमटी की बजाय नागरिक समय का उपयोग करते हैं। इसलिए, आवेदन तर्क लागू करने से पहले यूटीसी टाइमस्टैम्प को स्थानीय समय क्षेत्र में बदलने की योजना है।
  • याद रखें कि समय क्षेत्र और ऑफसेट तय नहीं हैं और बदल सकते हैं। उदाहरण के लिए, ऐतिहासिक रूप से अमेरिका और ब्रिटेन ने उसी तारीख का उपयोग 'वसंत आगे' और 'पतन वापस' करने के लिए किया था। हालांकि, 2007 में अमेरिका ने उन तिथियों को बदल दिया जो घड़ियों को बदलते हैं। इसका मतलब यह है कि वर्ष के 48 सप्ताह के लिए लंदन के समय और न्यूयॉर्क के बीच का अंतर 5 घंटे और 4 सप्ताह (वसंत ऋतु में 3, शरद ऋतु में 1) के बीच का अंतर 4 घंटे है। इस तरह की वस्तुओं में किसी भी गणना में जागरूक रहें जिसमें एकाधिक जोन शामिल हैं।
  • समय के प्रकार (वास्तविक घटना समय, प्रसारण समय, सापेक्ष समय, ऐतिहासिक समय, पुनरावर्ती समय) पर विचार करें कि कौन से तत्व (टाइमस्टैम्प, समय क्षेत्र ऑफ़सेट और समय क्षेत्र का नाम) आपको सही पुनर्प्राप्ति के लिए स्टोर करने की आवश्यकता है - "समय के प्रकार" देखें यह जवाब
  • स्वयं को और बाकी दुनिया के बीच, अपने ओएस, डेटाबेस और एप्लिकेशन tzdata फ़ाइलों को सिंक में रखें।
  • सर्वर पर, स्थानीय समय क्षेत्र की बजाय हार्डवेयर घड़ियों और ओएस घड़ियों को यूटीसी पर सेट करें।
  • पिछले बुलेट बिंदु के बावजूद, सर्वर-साइड कोड, वेब साइटों सहित, चाहिए कभी नहीँ सर्वर के स्थानीय समय क्षेत्र विशेष रूप से कुछ भी होने की उम्मीद है। उत्तर देखो
  • कॉन्फ़िगरेशन फ़ाइल सेटिंग्स या डिफ़ॉल्ट के माध्यम से वैश्विक रूप से बजाए, आपके एप्लिकेशन कोड में केस-बाय-केस आधार पर समय क्षेत्र के साथ काम करना पसंद करें।
  • उपयोग एनटीपी सभी सर्वरों पर सेवाएं।
  • अगर उपयोग कर रहे हैं FAT32, याद रखें कि टाइमस्टैम्प स्थानीय समय में संग्रहीत हैं, यूटीसी नहीं।
  • पुनरावर्ती घटनाओं (साप्ताहिक टीवी शो, उदाहरण के लिए) से निपटने पर, याद रखें कि समय डीएसटी के साथ बदलता है और समय क्षेत्र में अलग होगा।
  • हमेशा दिनांक-समय मानों के रूप में क्वेरी करें निचले बाध्य समावेशी, ऊपरी बाध्य अनन्य (>=, <)।

मत करो:

  • "समय क्षेत्र" को भ्रमित न करें, जैसे कि America/New_York एक "समय क्षेत्र ऑफ़सेट" के साथ, जैसे -05:00। वे दो अलग-अलग चीजें हैं। देख टाइमज़ोन टैग विकी
  • जावास्क्रिप्ट का प्रयोग न करें Date पुराने वेब ब्राउज़र में दिनांक और समय गणना करने के लिए ऑब्जेक्ट, ईसीएमएस्क्रिप्ट 5.1 और निचले हिस्से के रूप में एक डिजाइन दोष जो डेलाइट सेविंग टाइम का गलत इस्तेमाल कर सकता है। (यह ईसीएमएस्क्रिप्ट 6/2015 में तय किया गया था)।
  • ग्राहक की घड़ी पर भरोसा न करें। यह बहुत गलत हो सकता है।
  • लोगों को हमेशा "हर जगह यूटीसी का उपयोग" करने के लिए मत कहो। इस व्यापक सलाह को इस दस्तावेज़ में पहले वर्णित कई मान्य परिदृश्यों के बारे में बताया गया है। इसके बजाय, उस डेटा के लिए उपयुक्त समय संदर्भ का उपयोग करें जिसके साथ आप काम कर रहे हैं। (समय मुद्रांकन यूटीसी का उपयोग कर सकते हैं, लेकिन भविष्य के समय सारिणी और तारीख-केवल मूल्यों को नहीं करना चाहिए।)

परिक्षण:

  • परीक्षण करते समय, सुनिश्चित करें कि आप पश्चिमी, पूर्वी, उत्तरी और देशों में परीक्षण करें दक्षिण गोलार्द्ध (वास्तव में दुनिया की प्रत्येक तिमाही में, इसलिए 4 क्षेत्रों), दोनों डीएसटी प्रगति पर है और नहीं (8 देता है), और एक ऐसा देश जो डीएसटी का उपयोग नहीं करता है (सभी क्षेत्रों को कवर करने के लिए 4 अन्य, कुल मिलाकर 12 बनाते हैं)।
  • डीएसटी का टेस्ट संक्रमण, यानी जब आप वर्तमान में ग्रीष्मकालीन समय में हैं, तो सर्दियों से समय मूल्य चुनें।
  • टेस्ट सीमा के मामलों, जैसे समय-समय पर यूटीसी +12, डीएसटी के साथ, स्थानीय समय बनाते हैं गर्मियों में यूटीसी + 13 और सर्दियों में यूटीसी + 13 भी जगहें हैं
  • सभी तृतीय-पक्ष पुस्तकालयों और अनुप्रयोगों का परीक्षण करें और सुनिश्चित करें कि वे समय क्षेत्र डेटा को सही तरीके से संभाल लें।
  • कम से कम आधे घंटे के समय क्षेत्र परीक्षण करें।

संदर्भ:

अन्य:

  • डीएसटी के घृणा को समाप्त करने के लिए अपने प्रतिनिधि को लॉबी करें। हम हमेशा उम्मीद कर सकते हैं ...
  • के लिए लॉबी पृथ्वी मानक समय

803



जीएमटी का उपयोग वास्तव में समस्या को हल नहीं करता है, आपको अभी भी पता लगाना होगा क्या आवेदन करने का सही डेल्टा है, और यही वह जगह है जहां सभी जटिलताएं हैं। डेल्टा उन प्रणालियों में निर्धारित करने के लिए जटिल हो सकता है जो विभिन्न क्षेत्रों में उपयोगकर्ताओं द्वारा उपयोग किए जाते हैं (विभिन्न डेलाइट सेविंग स्विच शेड्यूल के साथ) या ऐतिहासिक / भविष्य के डेटा दिखाने वाले सिस्टम में। - ckarras
यह सच है अगर सभी आवेदन करने की आवश्यकता वर्तमान स्थानीय समय को प्रदर्शित करना है। लेकिन अगर हमारे पास ऑस्ट्रेलिया में एक सर्वर है जो 2 अप्रैल 2006 को कनाडा में लेनदेन के लिए तिथि / समय प्रदर्शित करने की आवश्यकता है (यह कनाडा में डेलाइट सेविंग स्विचिंग नियमों में बदलाव से पहले पिछले साल था) - क्या आपके पास ओएस कॉल है जो डेटटाइम कर सकता है ("2006/04/02 14: 35Z")। ToLocalTime () .DDlightSavingRules ("कनाडा", 2006)? - ckarras
हां, विंडोज़ में ऐसे ओएस कॉल हैं - SystemTimeToTzSpecificLocation। msdn.microsoft.com/en-us/library/ms724949(VS.85).aspx - Michael Madsen
@ trrist शायद अगर आप लगातार कर सकते हैं तो आप कर सकते हैं। - Peter Ajtai
भविष्य में तारीखों (यहां तक ​​कि कल) को यूटीसी में परिवर्तित करने में ध्यान रखें हमेशा कुछ खोना। उदाहरण के लिए, आपने उस रूपांतरण को करने के लिए कुछ ज्ञात ऑफसेट का उपयोग किया था, लेकिन चूंकि तिथि भविष्य में है, इसलिए हमेशा उन अवसरों को सेट करने वाले समूह को नियमों को बदल दिया जाएगा। साथ ही, कुछ भविष्य की तारीखों को यूटीसी में परिवर्तित करना लगभग असंभव है क्योंकि उस वर्ष तक डेलाइट बचत के समय ज्ञात नहीं हैं (कुछ देश हर साल तिथियां निर्धारित करते हैं, 10+ साल आगे नहीं या किसी भी सेट नियमों के आधार पर)। - eselk


मुझे यकीन नहीं है कि मैं ऊपर दिए गए उत्तरों में क्या जोड़ सकता हूं, लेकिन यहां से कुछ बिंदु हैं:

समय के प्रकार

आपको चार अलग-अलग समय पर विचार करना चाहिए:

  1. घटना का समय: उदाहरण के लिए, वह समय जब एक अंतरराष्ट्रीय खेल आयोजन होता है, या एक राजनेता / मृत्यु / आदि। यह घटना के समय क्षेत्र पर निर्भर है और दर्शकों की नहीं।
  2. टेलीविजन समय: उदाहरण के लिए, दुनिया भर में 9 बजे स्थानीय समय पर एक विशेष टीवी शो प्रसारित किया जाता है। अपनी वेबसाइट पर परिणामों को प्रकाशित करने के बारे में सोचते समय (अमेरिकी आइडल कहें) महत्वपूर्ण है
  3. सापेक्ष समय: उदाहरण: इस प्रश्न में 21 घंटे में खुली बक्षीस बंद है। यह प्रदर्शित करना आसान है
  4. आवर्ती समय: उदाहरण: प्रत्येक टीवी सोमवार को शाम 9 बजे होता है, भले ही डीएसटी बदलता है।

ऐतिहासिक / वैकल्पिक समय भी है। ये परेशान हैं क्योंकि वे मानक समय पर वापस मानचित्र नहीं कर सकते हैं। उदाहरण: जूलियन तिथियां, शनि, चंद्रमा कैलेंडर पर चंद्र कैलेंडर के अनुसार तिथियां।

यूटीसी में स्टार्ट / एंड टाइमस्टैम्प स्टोर करना अच्छी तरह से काम करता है। 1 के लिए, आपको घटना के साथ संग्रहीत एक ईवेंट टाइमज़ोन नाम + ऑफसेट की आवश्यकता है। 2 के लिए, आपको प्रत्येक क्षेत्र के साथ संग्रहीत स्थानीय समय पहचानकर्ता और प्रत्येक व्यूअर के लिए संग्रहीत स्थानीय टाइमज़ोन नाम + ऑफसेट की आवश्यकता होती है (यदि आप क्रंच में हैं तो इसे आईपी से प्राप्त करना संभव है)। 3 के लिए, यूटीसी सेकेंड में स्टोर करें और टाइमज़ोन की आवश्यकता नहीं है। 4 यह एक वैश्विक या स्थानीय घटना है या नहीं, इसके आधार पर 1 या 2 का एक विशेष मामला है, लेकिन आपको स्टोर करने की भी आवश्यकता है पर बनाया गया टाइमस्टैम्प ताकि आप यह बता सकें कि इस घटना के पहले या बाद में एक टाइमज़ोन परिभाषा बदल गई थी या नहीं। यदि आपको ऐतिहासिक डेटा दिखाना आवश्यक है तो यह आवश्यक है।

भंडारण के समय

  • हमेशा यूटीसी में समय स्टोर करें
  • प्रदर्शन पर स्थानीय समय में कनवर्ट करें (स्थानीय डेटा को डेटा देखकर परिभाषित किया जा रहा है)
  • टाइमज़ोन संग्रहीत करते समय, आपको नाम, टाइमस्टैम्प और ऑफसेट की आवश्यकता होती है। यह आवश्यक है क्योंकि सरकार कभी-कभी अपने टाइमज़ोन के अर्थों को बदलती है (उदाहरण: अमेरिकी सरकार ने डीएसटी तिथियों को बदल दिया), और आपके आवेदन को चीजों को अच्छी तरह से संभालने की ज़रूरत है ... उदाहरण: जब खोए गए एपिसोड डीएसटी नियमों के पहले और बाद में दिखाए गए सटीक टाइमस्टैम्प बदला हुआ।

ऑफसेट और नाम

उपर्युक्त का एक उदाहरण होगा:

फुटबॉल विश्व कप फाइनल खेल   दक्षिण अफ्रीका में हुआ (यूटीसी + 2 - एसएएसटी)   11 जुलाई, 2010 को 1 9:00 यूटीसी पर।

इस जानकारी के साथ, हम ऐतिहासिक रूप से सटीक समय निर्धारित कर सकते हैं जब 2010 के डब्ल्यूसीएस फाइनल हुए थे, भले ही दक्षिण अफ़्रीकी टाइमज़ोन परिभाषा बदलती है, तथा जब वे डेटाबेस से पूछते हैं तो उनके स्थानीय टाइमज़ोन में दर्शकों को प्रदर्शित करने में सक्षम हो।

सिस्टम का समय

आपको अपने ओएस, डेटाबेस और एप्लिकेशन tzdata फ़ाइलों को एक दूसरे के साथ, और बाकी दुनिया के साथ सिंक में रखने की आवश्यकता है, और अपग्रेड करते समय बड़े पैमाने पर परीक्षण करना होगा। यह अनदेखा नहीं है कि आप जिस तीसरे पक्ष के ऐप पर निर्भर करते हैं वह एक टीजेड परिवर्तन को सही तरीके से संभाल नहीं करता है।

सुनिश्चित करें कि हार्डवेयर घड़ियों को यूटीसी पर सेट किया गया है, और यदि आप दुनिया भर में सर्वर चला रहे हैं, तो सुनिश्चित करें कि उनके ओएसई यूटीसी का उपयोग करने के लिए भी कॉन्फ़िगर किए गए हैं। यह तब स्पष्ट हो जाता है जब आपको एकाधिक टाइमज़ोन में सर्वर से प्रति घंटा घुमावदार अपाचे लॉग फ़ाइलों की प्रतिलिपि बनाने की आवश्यकता होती है। उन्हें फ़ाइल नाम से सॉर्ट करना केवल तभी काम करता है जब सभी फ़ाइलों को एक ही समय क्षेत्र के साथ नामित किया जाता है। इसका मतलब यह भी है कि जब आप एक बॉक्स से दूसरे बॉक्स में ssh करते हैं और टाइमस्टैम्प की तुलना करने की आवश्यकता होती है तो आपको अपने सिर में डेट गणित करने की आवश्यकता नहीं होती है।

साथ ही, सभी बक्से पर एनटीपीडी चलाएं।

ग्राहकों

किसी क्लाइंट मशीन से प्राप्त होने वाले टाइमस्टैम्प पर भरोसा न करें। उदाहरण के लिए, दिनांक: HTTP शीर्षलेख, या जावास्क्रिप्ट Date.getTime() कहते हैं। ये ठीक हैं जब अपारदर्शी पहचानकर्ताओं के रूप में उपयोग किया जाता है, या एक ही क्लाइंट पर एक सत्र के दौरान दिनांक गणित करते समय, लेकिन सर्वर पर आपके पास कुछ मानों को पार करने का प्रयास न करें। आपके ग्राहक एनटीपी नहीं चलाते हैं, और उनके पास BIOS घड़ी के लिए एक काम करने वाली बैटरी नहीं हो सकती है।

सामान्य ज्ञान

अंत में, सरकारें कभी-कभी बहुत अजीब चीजें करती हैं:

नीदरलैंड में मानक समय था   बिल्कुल 1 9 मिनट और 32.13 सेकेंड   1 9 0 9-05-01 से कानून द्वारा यूटीसी से आगे   1 937-06-30 के माध्यम से। इस बार क्षेत्र   बिल्कुल उपयोग नहीं किया जा सकता है   एचएच: एमएम प्रारूप।

ठीक है, मुझे लगता है कि मैं कर रहा हूँ।


288



इस जवाब में कुछ महान अंक हैं, मैं विशेष रूप से इस भाग को इंगित करना चाहता था "आवर्ती समय: उदाहरण: प्रत्येक टीवी सोमवार को 9 बजे अपराह्न पर होता है, भले ही डीएसटी बदलता है" डीबी में यूटीसी में भंडारण समय और फिर प्रदर्शन के लिए कनवर्ट करना समय क्षेत्रों से निपटने के कई मुश्किल पहलुओं। हालांकि, डीएसटी बाधाओं को पार करने वाली "पुनरावर्ती घटनाओं" को संभालना बहुत मुश्किल हो जाता है। - Jared Hales
ट्रिविया के लिए +1। सामग्री को दिलचस्प रखना इस कार्य को और अधिक सुखद बनाता है, जिससे उत्पादकता में वृद्धि हो सकती है :) - Chris
इस जवाब में बहुत अच्छी चीजें हैं, लेकिन कुछ मुद्दे हैं। 1) कई समय क्षेत्र संक्षेप अस्पष्ट हैं। यहाँ देखें  2) नहीं हमेशा क्या आप यूटीसी में स्टोर करना चाहते हैं। अधिकांश समय - हाँ, लेकिन संदर्भ मायने रखता है। आपकी शर्तों में, टेलीविजन समय यूटीसी में संग्रहित नहीं किया जाएगा। साथ ही, कभी-कभी इसकी गैरकानूनी या नीति के खिलाफ स्थानीय समय को स्टोर नहीं करना - जहां चीजें हैं DateTimeOffset (या समतुल्य) काम में आते हैं। अन्यथा, अच्छा लिखो। - Matt Johnson
नीदरलैंड की सामान्यता कानूनी दिखती है। ietf.org/rfc/rfc3339.txt धारा 5.8। हाफवे ने सोचा कि कोई हमारे पैर खींच रहा था। - ruffin
सरकारों के लिए अजीब चीजें करने का एक और उदाहरण: timeanddate.com/news/time/turkey-scraps-dst-2016.html - Ad Infinitum


यह एक महत्वपूर्ण और आश्चर्यजनक रूप से कठिन मुद्दा है। सच्चाई यह है कि लगातार समय के लिए कोई पूरी तरह से संतोषजनक मानक नहीं है। उदाहरण के लिए, एसक्यूएल मानक और आईएसओ प्रारूप (आईएसओ 8601) स्पष्ट रूप से पर्याप्त नहीं हैं।

वैचारिक दृष्टिकोण से, आमतौर पर दो प्रकार के समय-तिथि डेटा से संबंधित होता है, और उन्हें अलग करना सुविधाजनक होता है (उपरोक्त मानकों को नहीं): "शारीरिक समय" तथा "नागरिक समय"।

समय का एक "भौतिक" तत्काल सार्वभौमिक समयरेखा में एक बिंदु है जो भौतिकी के साथ सौदा करता है (निश्चित रूप से सापेक्षता को अनदेखा कर रहा है)। यूटीसी में इस अवधारणा को पर्याप्त रूप से कोडित किया जा सकता है, उदाहरण के लिए (यदि आप लीप सेकेंड को अनदेखा कर सकते हैं)।

एक "नागरिक" समय एक डाटाटाइम विनिर्देश है जो नागरिक मानदंडों का पालन करता है: यहां समय का एक बिंदु पूरी तरह से डेटाटाइम फ़ील्ड्स (वाई, एम, डी, एच, एमएम, एस, एफएस) के सेट द्वारा निर्दिष्ट किया जाता है और साथ ही एक टीजेड (टाइमज़ोन विनिर्देश) (वास्तव में एक "कैलेंडर" भी है, लेकिन मान लीजिए कि हम चर्चा को ग्रेगोरियन कैलेंडर में प्रतिबंधित करते हैं)। एक टाइमज़ोन और कैलेंडर संयुक्त रूप से (सिद्धांत रूप में) एक प्रतिनिधित्व से दूसरे में मानचित्रण करने की अनुमति देता है। लेकिन नागरिक और भौतिक समय के तत्काल विभिन्न प्रकार के परिमाण हैं, और उन्हें अवधारणात्मक रूप से अलग रखा जाना चाहिए और अलग-अलग व्यवहार किया जाना चाहिए (एक समानता: बाइट्स और चरित्र तारों के सरणी)।

मुद्दा भ्रमित है क्योंकि हम इन प्रकार की घटनाओं को एक दूसरे के साथ बोलते हैं, और क्योंकि नागरिक समय राजनीतिक परिवर्तनों के अधीन हैं। समस्या (और इन अवधारणाओं को अलग करने की आवश्यकता) भविष्य में घटनाओं के लिए अधिक स्पष्ट हो जाती है। उदाहरण (मेरी चर्चा से लिया गया यहाँ

जॉन अपने कैलेंडर में डेटाटाइम पर कुछ घटनाओं के लिए एक अनुस्मारक रिकॉर्ड करता है 2019-Jul-27, 10:30:00, टीजेड =Chile/Santiago, (जिसने जीएमटी -4 ऑफसेट किया है, इसलिए यह यूटीसी के अनुरूप है 2019-Jul-27 14:30:00)। लेकिन कुछ दिन भविष्य में, देश टीजेड ऑफसेट को जीएमटी -5 में बदलने का फैसला करता है।

अब, जब दिन आता है ... उस अनुस्मारक को ट्रिगर करना चाहिए

ए) 2019-Jul-27 10:30:00 Chile/Santiago  = UTC time 2019-Jul-27 15:30:00 ?

या

बी) 2019-Jul-27 9:30:00 Chile/Santiago  = UTC time 2019-Jul-27 14:30:00 ?

कोई सही जवाब नहीं है, जब तक कोई जानता है कि जॉन का क्या मतलब है जब उसने कैलेंडर को बताया "कृपया मुझे रिंग करें 2019-Jul-27, 10:30:00 TZ=Chile/Santiago"।

क्या उसका मतलब "नागरिक दिनांक-समय" था ("जब मेरे शहर में घड़ियों बताते हैं 10:30 ")? उस मामले में, ए) सही जवाब है।

या उसका मतलब निरंतरता में एक बिंदु "समय का भौतिक क्षण" था हमारे ब्रह्मांड के समय की रेखा, कहें, "जब अगला सौर ग्रहण होता है होता है "। उस मामले में, उत्तर बी) सही है।

कुछ दिनांक / समय एपीआई इस भेद को सही पाते हैं: उनमें से, Jodatime, जो अगली (तीसरी!) जावा डेटटाइम एपीआई (जेएसआर 310) की नींव है।


81



एपीआई में संबोधित किए गए विचारों पर विचार करने का एक और मुद्दा यह है कि समय और समय क्षेत्र भी दिए जाने पर, कम से कम दो व्यावहारिक अर्थ हैं उदाहरण के लिए "13: 00: 00EDT"। यह उस समय का उल्लेख किया जा सकता है जो स्थानीय समय 1 बजे हुआ था, जिसे पूर्वी डेलाइट टाइम माना जाता था, या ऐसा कुछ ऐसा माना जाता है जब पूर्वी समय 13:00 बजे हुआ था, जिसे माना जाता है पूर्वी डेलाइट समय का निरीक्षण करने वाले स्थान पर हुआ है। अगर किसी के पास कई टाइमस्टैम्प हैं जहां टाइम-जोन जानकारी गलत हो सकती है (उदा। डिजिटल कैमरा फाइलें) ... - supercat
... यह जानकर कि वे सही समय या वैश्विक समय को प्रतिबिंबित करते हैं, उन्हें निर्धारित करने के तरीके में यह महत्वपूर्ण हो सकता है कि उन्हें सही कैसे किया जाए। - supercat
जाहिर है जॉन ए चाहता है ए) क्योंकि लोग 8:30 बजे काम पर जाते हैं, जो वर्तमान में डीएसटी या टाइमज़ोन है। यदि वे डीएसटी में जाते हैं, तो वे 8:30 बजे काम पर जाएंगे, जब वे डीएसटी से बाहर निकलेंगे, तो वे 8:30 बजे काम पर जाएंगे। अगर देश दूसरे समय क्षेत्र में जाने का फैसला करता है, तो वे 8:30 बजे काम पर जाएंगे - Gianluca Ghettini


चिंताओं के स्पष्ट वास्तुकला को अलग करें - यह जानने के लिए कि कौन से स्तर उपयोगकर्ताओं के साथ बातचीत करते हैं, और उन्हें कैननिकल प्रतिनिधित्व (यूटीसी) के लिए दिनांक-समय बदलना होगा। गैर-यूटीसी दिनांक-समय प्रस्तुति है (उपयोगकर्ता स्थानीय टाइमज़ोन का पालन करता है), यूटीसी समय मॉडल है (बैक एंड एंड मिड टायर के लिए अद्वितीय बना हुआ है)।

इसके अलावा, तय करें कि आपके वास्तविक दर्शक क्या हैं, आपको क्या सेवा नहीं है और आप लाइन कहां खींचते हैं। विदेशी कैलेंडर को तब तक न छूएं जब तक कि आपके पास वास्तव में महत्वपूर्ण ग्राहक न हों और फिर उस क्षेत्र के लिए अलग-अलग उपयोगकर्ता-सामना करने वाले सर्वर पर विचार करें।

यदि आप उपयोगकर्ता के स्थान को प्राप्त और बनाए रख सकते हैं, तो व्यवस्थित दिनांक-समय रूपांतरण (.NET संस्कृति या SQL तालिका कहें) के लिए स्थान का उपयोग करें, लेकिन यदि आपके उपयोगकर्ताओं के लिए डेट-टाइम महत्वपूर्ण है तो अंत उपयोगकर्ता को ओवरराइड चुनने का एक तरीका प्रदान करें।

यदि ऐतिहासिक लेखा परीक्षा दायित्व हैं शामिल (जैसे कि एजेड में जो ने 2 साल पहले एक बिल का भुगतान किया था) फिर यूटीसी और स्थानीय समय दोनों रखें रिकॉर्ड के लिए (आपकी रूपांतरण तालिका समय के दौरान बदल जाएगी)।

थोक में आने वाले डेटा के लिए समय संदर्भित समय क्षेत्र परिभाषित करें - फाइलों, वेब सेवाओं आदि की तरह। पूर्वी तट कंपनी के पास सीए में डेटा सेंटर है - आपको पूछना और पता होना चाहिए कि वे एक या दूसरे को मानने के बजाय मानक के रूप में क्या उपयोग करते हैं।

दिनांक-समय के पाठपरक प्रतिनिधित्व में एम्बेडेड टाइम-जोन ऑफ़सेट पर भरोसा न करें पार्स स्वीकार करने और उनका पालन करने के लिए स्वीकार नहीं करते हैं। इसके बजाय हमेशा उस समय क्षेत्र का अनुरोध करें और / या संदर्भ क्षेत्र को स्पष्ट रूप से परिभाषित किया जाना चाहिए। आप पीएसटी ऑफसेट के साथ आसानी से समय प्राप्त कर सकते हैं लेकिन वास्तव में समय ईएसटी है क्योंकि क्लाइंट का संदर्भ समय है और रिकॉर्ड सिर्फ एक सर्वर पर निर्यात किए गए थे जो पीएसटी में है।


53





आपको ओल्सन के बारे में जानना होगा टीजे डेटाबेस, जो से उपलब्ध है ftp://elsie.nci.nih.gov/pub  http://iana.org/time-zones/। यह दुनिया भर के विभिन्न देशों में शीतकालीन और गर्मी (मानक और डेलाइट सेविंग) समय के बीच स्विच करने के लिए (और चाहे) में अक्सर अंतिम मिनट के परिवर्तनों से निपटने के लिए प्रति वर्ष कई बार अपडेट किया जाता है। 200 9 में, अंतिम रिलीज 200 9 थी; 2010 में, यह 2010 एन था; 2011 में, यह 2011n था; मई 2012 के अंत में, रिलीज 2012 सी थी। ध्यान दें कि दो अलग-अलग अभिलेखागार (tzcode20xxy.tar.gz और tzdata20xxy.tar.gz) में डेटा और वास्तविक समय क्षेत्र डेटा को प्रबंधित करने के लिए कोड का एक सेट है। कोड और डेटा दोनों सार्वजनिक डोमेन में हैं।

यह समय क्षेत्र के नामों का स्रोत है जैसे अमेरिका / लॉस_एंजेलस (और समानार्थी जैसे यूएस / प्रशांत)।

यदि आपको विभिन्न क्षेत्रों का ट्रैक रखने की आवश्यकता है, तो आपको ओल्सन डेटाबेस की आवश्यकता है। जैसा कि अन्य ने सलाह दी है, आप डेटा को एक निश्चित प्रारूप में भी स्टोर करना चाहते हैं - यूटीसी आमतौर पर एक चुना जाता है - उस समय क्षेत्र के रिकॉर्ड के साथ जिसमें डेटा जेनरेट किया गया था। आप उस समय यूटीसी से ऑफसेट और समय क्षेत्र के नाम के बीच अंतर करना चाहते हैं; जो बाद में एक अंतर कर सकते हैं। साथ ही, यह जानकर कि यह वर्तमान में 2010-03-28T23 है: 47: 00-07: 00 (यूएस / प्रशांत) मूल्य 2010-11-15T12: 30 की व्याख्या करने में आपकी सहायता नहीं कर सकता है - जो संभवतः पीएसटी में निर्दिष्ट है ( प्रशांत मानक समय) पीडीटी (प्रशांत डेलाइट सेविंग टाइम) के बजाए।

मानक सी लाइब्रेरी इंटरफेस इस तरह की चीजों के साथ डरावनी मददगार नहीं हैं।


ओल्सन डेटा कुछ हद तक चले गए हैं क्योंकि ए डी ओल्सन जल्द ही सेवानिवृत्त हो जाएंगे, और कुछ हद तक क्योंकि कॉपीराइट उल्लंघन के लिए रखरखावियों के खिलाफ एक कानून (अब खारिज कर दिया गया) कानून सूट था। समय क्षेत्र डेटाबेस अब के अनुपालन में प्रबंधित किया जाता है IANA, इंटरनेट असाइन नंबर संख्या प्राधिकरण, और सामने वाले पृष्ठ पर एक लिंक है 'टाइम जोन डेटाबेस'। चर्चा मेलिंग सूची अब है tz@iana.org; घोषणा सूची है tz-announce@iana.org


38



ओल्सन डेटाबेस में शामिल हैं ऐतिहासिक डेटा भी, जो इसे डीएसटी को संभालने के लिए विशेष रूप से उपयोगी बनाता है। उदाहरण के लिए, यह जानता है कि यू.एस. में 31 मार्च, 2000 के अनुरूप एक यूटीसी मूल्य डीएसटी में नहीं है, लेकिन यू.एस. में 31 मार्च, 2008 के अनुरूप यूटीसी मूल्य है। - Josh Kelley
यूनिकोड कंसोर्टियम ओल्सन टोम जोन आईडी और विंडोज़ समय क्षेत्र आईडी के बीच मैपिंग बनाए रखता है: unicode.org/repos/cldr-tmp/trunk/diff/supplemental/... - Josh Kelley
यूनिकोड कंसोर्टियम के पृष्ठ के लिए अद्यतन लिंक: unicode.org/repos/cldr-tmp/trunk/diff/supplemental/... - Span
ओल्सन फ़ाइलों को पार्स करने के बारे में जानकारी कहां मिल सकती है? मैं इसे एक डीबी टेबल में संकलित करना चाहता हूं, लेकिन यह नहीं समझ सकता कि मुझे फ़ाइलों को कैसे पढ़ा जाना चाहिए - shealtiel
@gidireich: मुख्य जानकारी डेटा के साथ मिलती है, और इसे समझना आसान नहीं है। इसके लिए मुख्य दस्तावेज है zic.8 मैन पेज (या zic.8.txt)। आपको इसकी आवश्यकता होगी tzcode2011i.tar.gz बजाय, या साथ ही, फ़ाइल tzdata2011i.tar.gz इस जानकारी को पाने के लिए फ़ाइल। - Jonathan Leffler


सामान्य रूप में, स्थानीय समय ऑफसेट (डीएसटी ऑफ़सेट सहित) शामिल करें संग्रहीत टाइमस्टैम्प में: यूटीसी अकेले पर्याप्त नहीं है यदि आप बाद में अपने मूल टाइमज़ोन (और डीएसटी सेटिंग) में टाइमस्टैम्प प्रदर्शित करना चाहते हैं।

ध्यान रखें कि ऑफसेट हमेशा एक पूर्णांक संख्या नहीं है (उदाहरण के लिए भारतीय मानक समय यूटीसी + 05: 30 है)।

उदाहरण के लिए, उपयुक्त प्रारूप एक टुपल (यूनिक्स समय, मिनटों में ऑफसेट) हैं या आईएसओ 8601


24



प्रदर्शन के लिए, ऑफसेट सही है। यदि आप परिवर्तन करना चाहते हैं, तो ऑफ़सेट अभी भी पर्याप्त नहीं है। आपको समय क्षेत्र भी पता होना चाहिए क्योंकि नए मूल्य को एक अलग ऑफ़सेट की आवश्यकता हो सकती है। - Matt Johnson


"कंप्यूटर समय" और "लोगों के समय" की सीमा पार करना एक दुःस्वप्न है। मुख्य बात यह है कि टाइमज़ोन और डेलाइट सेविंग टाइम्स को नियंत्रित करने वाले नियमों के लिए मानक नहीं है। देश किसी भी समय अपने टाइमज़ोन और डीएसटी नियमों को बदलने के लिए स्वतंत्र हैं, और वे करते हैं।

कुछ देश उदा। इज़राइल, ब्राजील, हर साल अपने डेलाइट सेविंग के समय कब तय करते हैं, इसलिए अग्रिम में जानना असंभव है जब (अगर) डीएसटी प्रभावी होगा। अन्य ने डीएसटी प्रभावी होने पर (आईएसएच) नियम तय किए हैं। अन्य देश डीएसटी का उपयोग नहीं करते हैं।

टाइमज़ोन को जीएमटी से पूर्ण घंटे के अंतर होने की जरूरत नहीं है। नेपाल +5.45 है। ऐसे समय भी हैं जो +13 हैं। इसका मतलब है कि:

SUN 23:00 in Howland Island (-12)
MON 11:00 GMT 
TUE 00:00 in Tonga (+13)

सभी एक ही समय हैं, फिर भी 3 अलग-अलग दिन!

टाइमज़ोन के लिए संक्षेप में कोई स्पष्ट मानक नहीं है, और डीएसटी में जब वे बदलते हैं तो आप इस तरह की चीजों के साथ समाप्त होते हैं:

AST Arab Standard Time     UTC+03
AST Arabian Standard Time  UTC+04
AST Arabic Standard Time   UTC+03

सबसे अच्छी सलाह स्थानीय समय से जितनी ज्यादा हो सके दूर रहना और यूटीसी के साथ रहना है जहां आप कर सकते हैं। केवल अंतिम संभव पल में स्थानीय समय में कनवर्ट करें।

परीक्षण करते समय यह सुनिश्चित करें कि आप पश्चिमी और पूर्वी गोलार्धों में परीक्षण करते हैं, दोनों डीएसटी प्रगति पर हैं और नहीं और ऐसा देश जो डीएसटी (कुल में 6) का उपयोग नहीं करता है।


22



इज़राइल के बारे में - यह आधा सच है। हालांकि डीएसटी परिवर्तन का समय जूलियन कैलेंडर में एक विशिष्ट तारीख नहीं है - हिब्रू कैलेंडर के आधार पर एक नियम है (2014 में कोई बदलाव आया था)। वैसे भी, सामान्य विचार सही है - यह चीजें थोड़ी देर में बदल सकती हैं और बदल सकती हैं - Yaron U.
इसके अलावा, एएसटी = अटलांटिक मानक समय। 'सर्वश्रेष्ठ सलाह' के लिए, यह एक शुरुआती बिंदु के रूप में ठीक है, लेकिन आपको इस पृष्ठ के बाकी हिस्सों को पढ़ने की जरूरत है, और थोड़ी सी प्रार्थना कहें, और आप इसे थोड़ी देर के लिए सही समझ सकते हैं। - DavidWalley