2015-06-19 5 views
15

Accordingtomultiplepostings, माइक्रोसॉफ्ट ने वेब सर्वर के टाइमज़ोन को नियंत्रित करने के लिए एक अनुप्रयोग सेटिंग - WEBSITE_TIME_ZONE का उपयोग करने की क्षमता सक्षम की।Azure वेब ऐप्स पर टाइमज़ोन बदलना DateTimeOffset.Now के लिए काम नहीं करता है?

इसे आजमाने के लिए, मैंने यह मान "पूर्वी मानक समय" पर सेट किया जो मेरा स्थानीय समय क्षेत्र है।

एक ASP.NET MVC उस्तरा पृष्ठ पर, मैं निम्नलिखित कोड कहा:

:

DateTime.Now: @DateTime.Now 
DateTimeOffset.Now: @DateTimeOffset.Now 
DateTime.UtcNow: @DateTimeOffset.UtcNow 

जब मैं 17:10:07 पूर्वी मानक समय पर इस कल रात भाग गया, यह निम्न उत्पादन दे दी है

DateTime.Now: 6/18/2015 5:10:07 PM 
DateTimeOffset.Now: 6/18/2015 5:10:07 PM +00:00 
DateTime.UtcNow: 6/18/2015 9:10:07 PM 

जैसा कि आप देख सकते हैं, सेटिंग ने DateTime.Now को 0Tको अपने टाइमज़ोन में सही मूल्य वापस करने के लिए अजीब वेबसाइट्स/वेब ऐप्स की तरह सामान्य रूप से करने की अनुमति दी है। DateTime.UtcNow ने हमेशा स्पष्ट कारणों से सही मूल्य वापस कर दिया है।

हालांकि, DateTimeOffset.Now स्थानीय समय देता है, लेकिन +00:00 के ऑफसेट के साथ - लगभग टाइमज़ोन की बजाय घड़ी बदल दी गई थी। यह तब होता है, भले ही documentation का कहना है (जोर मेरा):

एक DateTimeOffset उद्देश्य यह है कि वर्तमान कंप्यूटर पर वर्तमान दिनांक और समय पर सेट किया जाता हो जाता है, स्थानीय समय के लिए सेट ऑफसेट के साथ से समन्वित सार्वभौमिक समय ऑफसेट (यूटीसी)

तो क्या हो रहा है कि WEBSITE_TIME_ZONE सेटिंग प्रभावों DateTime.Now लेकिन यह DateTimeOffset.Now प्रभावित नहीं करता है? और क्या मैं इस तरह से किसी भी तरह से मिल सकता है?

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

+2

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

+0

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

+1

समझ में आता है - और मैं उन चीजों के साथ प्रयोग करने के लिए हूं जो आप वास्तव में नहीं करना चाहते हैं :) –

उत्तर

0

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

सीएलआर कोड में खोदने के बाद, ऐसा लगता है कि स्थानीय समय क्षेत्र सिस्टम रजिस्ट्री के खिलाफ देखा जाता है। एजेर वेब ऐप्स साझा वीएम पर चलने के बाद से सीएलआर कोड में बदलाव किए बिना वे इसका सही ढंग से समर्थन कैसे कर सकते हैं, यह न देखें।

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

// rewrite local timezone 
var tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 

var fInfo = typeof(TimeZoneInfo).GetField("s_cachedData", BindingFlags.Static|BindingFlags.NonPublic); 
var cachedData = fInfo.GetValue(null); 

fInfo = cachedData.GetType().GetField("m_localTimeZone", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); 
fInfo.SetValue(cachedData, tz); 
5

ठीक है मेरे लिए यह अभी काम करता है।यह काम नहीं कर रहा कि आप सही मान सेट "समय क्षेत्र"

  • चेक कैसे अपने क्षेत्र के लिए लिखा है

    1. ओपन regedit
    2. खोजें। उदाहरण के लिए मेरे क्षेत्र "पूर्वी ईएसटी (+2)" है और रजिस्ट्री में इसका नाम है "ई यूरोप मानक समय"

    तो मैं नीला एप्लिकेशन "WEBSITE_TIME_ZONE: E. Europe Standard Time" में एप्लिकेशन सेटिंग को जोड़ा गया है और यह काम करता है।

  • +0

    यह उत्तर काम करता है, लेकिन regedit खोज मूर्खतापूर्ण है (और जिस मूल्य को मैं ढूंढ रहा था वह मेरी रजिस्ट्री में भी नहीं था)। मूल्यों को ऐसा करने के बजाय कहीं कहीं प्रकाशित किया जाना चाहिए। वैसे भी, जापान में उन लोगों के लिए एफवाईआई, मूल्य "टोक्यो मानक समय" है। यहां पर एक महान ब्लॉग पोस्ट है (केवल जेपी) http://blog.shibayan.jp/entry/20150909/1441725327 – starmandeluxe

    +0

    @starmandeluxe सबसे अच्छा यूटीसी का उपयोग शुरू करना है, अब मैं समाप्त हुआ कि मुझे यूटीसी में माइग्रेट करना होगा: (इसे करने के लिए थोड़ा प्रभावशाली आवश्यकता होगी। –

    +0

    सुझाव के लिए धन्यवाद! दुर्भाग्य से मैं एक ही नाव में हूं, जो विरासत कोडेबेस पर काम कर रहा है जिसे तुरंत जारी नहीं किया जा सकता है क्योंकि रिलीज होने की आवश्यकता है। इस बिंदु पर मुझे बस काम करने की ज़रूरत है। – starmandeluxe

    2

    जो इस प्रश्न पर ठोकर खा रहे हैं। यह अब लंबे समय से तय किया गया है।

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