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




timezone utc (24)

I have hit this on two types of systems, “shift planning systems (eg factory workers)” and “gas depend management systems)…

23 and 25 hour long days are a pain to cope with, so are 8hr shifts that take 7hr or 9hr. The problem is you will find that each customers, or even department of the customer have different rules they have created (often without documenting) on what they do in these special cases.

Some questions are best not asked of the customer's until after they have paid for your “off the shelf” software. It is very rare to find a customer that thinks about this type of issue up front when buying software.

I think in all cases you should record time in UTC and convert to/from local time before storing the date/time. However even know which take a given time is in can be hard with Daylight saving and time zones.

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

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

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

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

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

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

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

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

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


जबकि मैंने इसे आजमाया नहीं है, समय क्षेत्र समायोजन के लिए एक दृष्टिकोण मुझे आकर्षक मिल जाएगा:

  1. यूटीसी में सबकुछ स्टोर करें।

  2. तीन कॉलम के साथ एक टेबल TZOffsets बनाएं: RegionClassId, StartDateTime, और ऑफसेट मिनट (int, मिनटों में)।

तालिका में, स्थानीय समय बदलते समय और कितनी बार, तिथि और समय की एक सूची संग्रहित करें। तालिका में क्षेत्रों की संख्या और तिथियों की संख्या इस बात पर निर्भर करेगी कि आपको किस दुनिया की तारीखों और क्षेत्रों को समर्थन देने की आवश्यकता है। इस बारे में सोचें जैसे कि यह "ऐतिहासिक" तिथि है, भले ही तिथियों में भविष्य को कुछ व्यावहारिक सीमा में शामिल किया जाना चाहिए।

जब आपको किसी भी यूटीसी समय के स्थानीय समय की गणना करने की आवश्यकता होती है, तो बस यह करें:

SELECT DATEADD('m', SUM(OffsetMinutes), @inputdatetime) AS LocalDateTime
FROM   TZOffsets
WHERE  StartDateTime <= @inputdatetime
       AND RegionClassId = @RegionClassId;

आप इस ऐप को अपने ऐप में कैश करना चाहते हैं और डेटाबेस को मारने के बजाय प्रश्नों को करने के लिए LINQ या कुछ समान साधनों का उपयोग करना चाह सकते हैं।

यह डेटा सार्वजनिक डोमेन tz डेटाबेस से आसवित किया जा सकता है

इस दृष्टिकोण के लाभ और फुटनोट्स:

  1. No rules are baked into code, you can adjust the offsets for new regions or date ranges readily.
  2. You don't have to support every range of dates or regions, you can add them as needed.
  3. Regions don't have to correspond directly to geopolitical boundaries, and to avoid duplication of rows (for instance, most states in the US handle DST the same way), you can have broad RegionClass entries that link in another table to more traditional lists of states, countries, etc.
  4. For situations like the US where the start and end date of DST has changed over the past few years, this is pretty easy to deal with.
  5. Since the StartDateTime field can store a time as well, the 2:00 AM standard change-over time is handled easily.
  6. Not everywhere in the world uses a 1-hour DST. This handles those cases easily.
  7. The data table is cross-platform and could be a separate open-source project that could be used by developers who use nearly any database platform or programming language.
  8. This can be used for offsets that have nothing to do with time zones. For instance, the 1-second adjustments that happen from time to time to adjust for the Earth's rotation, historical adjustments to and within the Gregorian calendar, etc.
  9. Since this is in a database table, standard report queries, etc. can take advantage of the data without a trip through business logic code.
  10. This handles time zone offsets as well if you want it to, and can even account for special historical cases where a region is assigned to another time zone. All you need is an initial date that assigns a time zone offset to each region with a minimal start date. This would require creating at least one region for each time zone, but would allow you to ask interesting questions like: "What is the difference in local time between Yuma, Arizona and Seattle, Washington on February 2, 1989 at 5:00am?" (Just subtract one SUM() from the other).

Now, the only disadvantage of this approach or any other is that conversions from local time to GMT are not perfect, since any DST change that has a negative offset to the clock repeats a given local time. No easy way to deal with that one, I'm afraid, which is one reason storing local times is bad news in the first place.


Actually, kernel32.dll does not export SystemTimeToTzSpecificLocation. It does however export the following two: SystemTimeToTzSpecificLocalTime and TzSpecificLocalTimeToSystemTime...


In dealing with databases (in particular MySQL , but this applies to most databases), I found it hard to store UTC.

  • Databases usually work with server datetime by default (that is, CURRENT_TIMESTAMP).
  • You may not be able to change the server timezone.
  • Even if you are able to change the timezone, you may have third-party code that expects server timezone to be local.

I found it easier to just store server datetime in the database, then let the database convert the stored datetime back to UTC (that is, UNIX_TIMESTAMP()) in the SQL statements. After that you can use the datetime as UTC in your code.

If you have 100% control over the server and all code, it's probably better to change server timezone to UTC.


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

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

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

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

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

जॉन अपने कैलेंडर में 2019-Jul-27, 10:30:00 , टीजेड = Chile/Santiago , (जिसने जीएमटी -4 ऑफसेट किया है, पर कुछ कार्यक्रमों के लिए एक अनुस्मारक रिकॉर्ड किया है, इसलिए यह यूटीसी 2019-Jul-27 14:30:00 अनुरूप है 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 बजे बताती हैं")? उस मामले में, ए) सही जवाब है।

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

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


Tom Scott's video about timezones on YouTube on the Computerphile channel has also a nice and entertaining description of the topic. Examples include:

  • Samoa (an island in the Pacific Ocean) shifting its time zone forward by 24 hours to make trading easier with Australia and New Zealand,
  • West Bank , where 2 populations of people are following different time zones,
  • 18th century changes from the Julian calendar to the Gregorian calendar (which happened in the 20th century in Russia).

Business rules should always work on civil time (unless there's legislation that says otherwise). Be aware that civil time is a mess, but it's what people use so it's what is important.

Internally, keep timestamps in something like civil-time-seconds-from-epoch. The epoch doesn't matter particularly (I favour the Unix epoch ) but it does make things easier than the alternative. Pretend that leap-seconds don't exist unless you're doing something that really needs them (eg, satellite tracking). The mapping between timestamps and displayed time is the only point where DST rules should be applied; the rules change frequently (on a global level, several times a year; blame politicians) so you should make sure that you do not hard-code the mapping. Olson's TZ database is invaluable.


One other thing, make sure the servers have the up to date daylight savings patch applied.

We had a situation last year where our times were consistently out by one hour for a three-week period for North American users, even though we were using a UTC based system.

It turns out in the end it was the servers. They just needed an up-to-date patch applied ( Windows Server 2003 ).


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

समय के प्रकार

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

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

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

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

भंडारण के समय

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

ऑफसेट और नाम

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

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

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

सिस्टम का समय

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

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

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

ग्राहकों

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

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

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

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

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


For those struggling with this on .NET , see if using DateTimeOffset and/or TimeZoneInfo are worth your while.

If you want to use IANA/Olson time zones , or find the built in types are insufficient for your needs, check out Noda Time , which offers a much smarter date and time API for .NET.


Just wanted to point out two things that seem inaccurate or at least confusing:

Always persist time according to a unified standard that is not affected by daylight savings. GMT and UTC have been mentioned by different people, though UTC seems to be mentioned most often.

For (almost) all practical computing purposes, UTC is, in fact, GMT. Unless you see a timestamps with a fractional second, you're dealing with GMT which makes this distinction redundant.

Include the local time offset as is (including DST offset) when storing timestamps.

A timestamp is always represented in GMT and thus has no offset.


यदि आपका डिज़ाइन इसे समायोजित कर सकता है, तो सभी समय स्थानीय समय रूपांतरण से बचें!

मुझे कुछ पता है कि यह पागल हो सकता है लेकिन यूएक्स के बारे में सोच सकता है: उपयोगकर्ता नज़रअंदा तिथियों (आज, कल, अगले सोमवार) को पूर्ण तारीख (2010.09.17, शुक्रवार 17 सितंबर) की तुलना में तेजी से देखते हैं। और जब आप इसके बारे में अधिक सोचते हैं, तो टाइमज़ोन (और डीएसटी) की सटीकता अब और अधिक महत्वपूर्ण है now() , इसलिए यदि आप +/- 1 या 2 सप्ताह के लिए किसी सापेक्ष प्रारूप में दिनांक / डेटाटाइम व्यक्त कर सकते हैं, शेष तिथियां यूटीसी हो सकती हैं और यह 95% उपयोगकर्ताओं के लिए बहुत अधिक मायने रखती नहीं है।

इस तरह आप यूटीसी में सभी तिथियों को स्टोर कर सकते हैं और यूटीसी में सापेक्ष तुलना कर सकते हैं और बस अपने संबंधित दिनांक थ्रेसहोल्ड के बाहर उपयोगकर्ता यूटीसी तिथियां दिखा सकते हैं।

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


Never rely only on constructors like

 new DateTime(int year, int month, int day, int hour, int minute, TimeZone timezone)

They can throw exceptions when a certain date time does not exist due to DST. Instead, build your own methods for creating such dates. In them, catch any exceptions that occur due to DST, and adjust the time is needed with the transition offset. DST may occur on different dates and at different hours (even at midnight for Brazil) according to the timezone.


Keep your servers set to UTC, and make sure they all are configured for ntp or the equivalent.

UTC avoids daylight savings time issues, and out-of-sync servers can cause unpredictable results that take a while to diagnose.


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

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

टाइमज़ोन को जीएमटी से पूर्ण घंटे के अंतर होने की जरूरत नहीं है। नेपाल +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) का उपयोग नहीं करता है।


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

कर:

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

मत करो:

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

परिक्षण:

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

संदर्भ:

अन्य:

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

PHP के लिए:

PHP> 5.2 में डेटटाइमज़ोन क्लास पहले से ही ओल्सन डीबी पर आधारित है, जो अन्य लोग उल्लेख करते हैं, इसलिए यदि आप PHP में टाइमज़ोन रूपांतरण कर रहे हैं और डीबी में नहीं हैं, तो आपको ओल्सन फ़ाइलों को समझने की अनुमति है।

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

उपर्युक्त समस्या का सामना करने के लिए, timezonedb pecl पैकेज का उपयोग करें, यह फ़ंक्शन PHP के टाइमज़ोन डेटा को अपडेट करना है। इस पैकेज को जितनी बार अपडेट किया जाता है उतनी बार इंस्टॉल करें। (मुझे यकीन नहीं है कि क्या यह संकुल अद्यतन ओलसन अपडेट का बिल्कुल पालन करते हैं, लेकिन ऐसा लगता है कि यह आवृत्ति में अपडेट किया गया है जो कम से कम ओल्सन अपडेट के करीब है।)


If you happen to maintain database systems that are running with DST active, check carefully whether they need to be shut down during the transition in fall. Mandy DBS (or other systems as well) don't like passing the same point in (local) time twice, which is exactly what happens when you turn back the clock in fall. SAP has solved this with a (IMHO really neat) workaround - instead of turning back the clock, they just let the internal clock run at half the usual speed for two hours...


Here is my experience:-

(Does not require any third-party library)

  • On server-side, store times in UTC format so that all date/time values in database are in a single standard regardless of location of users, servers, timezones or DST.
  • On the UI layer or in emails sent out to user, you need to show times according to user. For that matter, you need to have user's timezone offset so that you can add this offset to your database's UTC value which will result in user's local time. You can either take user's timezone offset when they are signing up or you can auto-detect them in web and mobile platforms. For websites, JavaScript's function getTimezoneOffset() method is a standard since version 1.0 and compatible with all browsers. (Ref: http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp )

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

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

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

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

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

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


For the web, the rules aren't that complicated...

  • Server-side, use UTC
  • Client-side, use Olson
    • Reason: UTC-offsets are not daylight savings-safe (eg New York is EST (UTC - 5 Hours) part of the year, EDT (UTC - 4 Hours) rest of the year).
    • For client-side time zone determination, you have two options:

The rest is just UTC/local conversion using your server-side datetime libraries. Good to go...


Be careful when dealing with timestamps stored in the FAT32 filesystem - it is always persisted in local time coordinates (which include DST - see msdn article ). Got burned on that one.


  • Never, ever store local time without its UTC offset (or a reference to the time zone)—examples of how not to do it include FAT32 and struct tm in C.¹
  • Understand that a time zone is a combination of
    • a set of UTC offsets (eg +0100 in winter, +0200 in summer)
    • rules for when the switchover happens (which may change over time: for example, in the 1990s the EU harmonized the switchover as being on the last Sundays in March and October, at 02:00 standard time/03:00 DST; previously this differed between member states).

¹ Some implementations of struct tm do store the UTC offset, but this has not made it into the standard.


I recently had a problem in a web application where on an Ajax post-back the datetime coming back to my server-side code was different from the datetime served out.

It most likely had to do with my JavaScript code on the client that built up the date for posting back to the client as string, because JavaScript was adjusting for time zone and daylight savings, and in some browsers the calculation for when to apply daylight savings seemed to be different than in others.

In the end I opted to remove date and time calculations on the client entirely, and posted back to my server on an integer key which then got translated to date time on the server, to allow for consistent transformations.

My learning from this: Do not use JavaScript date and time calculations in web applications unless you ABSOLUTELY have to.





datetimeoffset