2009-02-18 14 views
8

मैं PHP में कैलेंडर/शेड्यूलिंग ऐप लिख रहा हूं। अभी मैं उस सप्ताह का दिन लेता हूं जिसे आप घटना और समय पर करना चाहते हैं। मैं टाइमज़ोन के लिए भी पूछता हूं और जीएमटी में घटना समय प्राप्त करने के अनुसार तदनुसार समायोजित करता हूं।शेड्यूलिंग और डीएसटी

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

मैं इन घटनाओं को कैलेंडर पर प्रदर्शित कर रहा हूं, इसलिए समय महत्वपूर्ण है।

+0

क्या आपको इसे सटीक समय पर या किसी भी समय चलाने के लिए कुछ अंतराल में नियमित रूप से चलाने की आवश्यकता है? – dusoft

+0

सप्ताह का दिन (दिन, महीना और वर्ष नहीं), टाइमज़ोन (शेड्यूल की तुलना में अलग-अलग समय क्षेत्र में पीपीएल?), और डीएसटी? यह mysql में संग्रहीत है? – OIS

उत्तर

3

डीएसटी से निपटना एक वास्तविक दर्द है।

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

फिर यदि घटना होने पर आपको सूचित करने की आवश्यकता है, तो हर दिन अगले 24-48 बजे के लिए ईवेंट एकत्र करें और अपने समय जीएमटी में परिवर्तित करें। ऐसा करने के लिए, आपको this one जैसे स्थान-टाइमज़ोन डेटाबेस की आवश्यकता है। घटना के समय प्रत्येक स्थान के लिए जीएमटी ऑफ़सेट प्राप्त करें और उस समय जीएमटी में कनवर्ट करने के लिए इसका उपयोग करें, फिर आपको पता चलेगा कि घटना कब होगी।

+0

वाह, यह रास्ता बहुत अधिक है। असल में यह एक कैलेंडर होता है, जिसमें घटनाएं साप्ताहिक होती हैं, और यह करना मुश्किल होगा। –

3

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

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

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

ये पुस्तकालय आमतौर पर Olson Zoneinfo DB जैसे नियम डेटाबेस के शीर्ष पर बनाए जाते हैं। ये नियम काफी बार बदल सकते हैं, इसलिए आपको अंतर्निहित डेटाबेस के अपडेट के शीर्ष पर रहना होगा, खासकर यदि आप वास्तव में वैश्विक एप्लिकेशन विकसित कर रहे हैं। हालांकि, वे गूढ़, घबराहट समय क्षेत्र के नियमों को बाहरी करने का अच्छा काम करते हैं ताकि आप (सिद्धांत में) नियमों को अद्यतन कर सकें, बिना आपके रनटाइम पर्यावरण का बड़ा अपग्रेड करना होगा या डीएसटी नियमों में महत्वपूर्ण कोड परिवर्तन करना होगा विशेष क्षेत्र परिवर्तन।

यह दुनिया में सबसे आसान समस्या नहीं है और हमें यह करना है कि हमें इसे करना है, लेकिन एक बार जब आप इसे दो बार कर चुके हैं और सटीक बिंदु-समय-समय पर प्रतिनिधित्व बनाम चिंता के बीच चिंताओं को अलग करते हैं स्थानीयकरण के बाद, यह दूसरी प्रकृति बन जाती है।

+0

दिशानिर्देशों के लिए कोई संदर्भ, मैं ओल्सन फ़ाइलों को कैसे पार्स कर सकता हूं? मैं अपने रीडमे में केवल किसी भी तरह से यूनिक्स – shealtiel

+0

में संकलित करने के लिए दिशानिर्देश देखता हूं आप उन्हें पार्स क्यों करना चाहते हैं? अधिकांश भाषाओं में पुस्तकालय या पुस्तकालय होते हैं जो इसके शीर्ष पर बैठते हैं। क्या आप अपनी पुस्तकालय लिख रहे हैं? –

+0

मुझे यह धारणा मिली कि पुस्तकालय पर्याप्त अद्यतित नहीं हैं। इस बीच मुझे लाइब्रेरी (PHP) को अद्यतित रखने का एक बहुत ही अच्छा तरीका मिला, इसलिए आप सही हैं – shealtiel

-2

उपयोगकर्ताओं को ज़िम्मेदारी क्यों न दें। मुझे लगता है कि आवेदन का उपयोग करने के लिए उन्हें पंजीकृत होने की आवश्यकता है।

बस उन्हें अपनी प्रोफ़ाइल में कहना है कि उनका समय ऑफसेट क्या है।जीएमटी + 2, जीएमटी - 8, आदि की तरह। वे जान लेंगे कि उनकी डीएसटी सेटिंग्स कब बदल गईं और तदनुसार अपनी प्रोफ़ाइल अपडेट करें।

बेशक, यह आपके उपयोगकर्ता आधार पर निर्भर करता है। वे दृष्टिकोण स्वीकार कर सकते हैं या नहीं।

+4

उपयोगकर्ता शायद ही कभी अपनी प्रोफाइल अपडेट करते हैं, और यह बहुत ही असंभव है कि जब भी डीएसटी शुरू होता है और समाप्त होता है तो वे ऐसा करने के इच्छुक होंगे। उपयोगकर्ता डीएसटी के बारे में सॉफ्टवेयर को जानने की उम्मीद करते हैं। –

संबंधित मुद्दे