मुझे रूबी में यूटीसी से दिए गए टाइमज़ोन के ऑफसेट की गणना करने की आवश्यकता है। कोड की यह पंक्ति मेरे लिए काम कर रहा था, या तो मैंने सोचा था कि:रूबी में यूटीसी से दिए गए टाइमज़ोन के घंटों में ऑफसेट की गणना कैसे की जा सकती है?
offset_in_hours = (TZInfo::Timezone.get(self.timezone).current_period.offset.utc_offset).to_f/3600.0
लेकिन, यह पता चला है कि मेरे लिए लौट रहा था स्टैंडर्ड ऑफसेट, नहीं डीएसटी ऑफसेट। उदाहरण के लिए,
self.timezone = "America/New_York"
मान अगर मैं, ऊपर लाइन, offset_in_hours = -5 नहीं चला -4 एकदम सही ढंग से यह देखते हुए कि तिथि आज 1 अप्रैल, 2012 है
किसी को भी मुझे सलाह कर सकते हैं यूटीसी से ऑफसेट_इन_होर्स की गणना कैसे करें रूबी में एक वैध स्ट्रिंग टाइमज़ोन दिया गया है जो मानक समय और डेलाइट बचत दोनों के लिए जिम्मेदार है?
धन्यवाद!
अद्यतन
यहाँ आईआरबी से कुछ उत्पादन होता है। ध्यान दें कि न्यू यॉर्क क्योंकि डेलाइट सेविंग यूटीसी, नहीं 5 के पीछे 4 घंटे है,:
>> require 'tzinfo'
=> false
>> timezone = "America/New_York"
=> "America/New_York"
>> offset_in_hours = TZInfo::Timezone.get(timezone).current_period.utc_offset/(60*60)
=> -5
>>
यह पता चलता है वहाँ TZInfo में एक बग है या यह डीएसटी-बारे में पता नहीं है
अद्यतन कि 2
प्रति joelparkerhender की टिप्पणियां, उपर्युक्त कोड में बग यह है कि मैं utc_offotal का उपयोग कर रहा था, utc_total_offset नहीं।
इस प्रकार, अपने मूल प्रश्न प्रति, कोड के सही लाइन है:
offset_in_hours = (TZInfo::Timezone.get(self.timezone).current_period.offset.utc_total_offset).to_f/3600.0
मुझे समझने में सहायता करें - यदि current_period dst के माध्यम से जागरूक है? वह डेलाइट बचत समय सक्रिय या निष्क्रिय है, तो current_period.offset क्यों विचार में नहीं ले रहा है? क्या यह एक बग है? आखिरकार, मुझे टाइमज़ोन में इन सभी विधियों के बारे में पता है, मेरा लक्ष्य वैरिएबल ऑफसेट_इन_होर्स – esilver
पर सही मान असाइन करना है, कृपया मेरा आउटपुट देखें, आईआरबी चलाने से - यह सुझाव देता है कि tzinfo वास्तव में, डीएसटी-जागरूक नहीं है, या एक बग है? – esilver
कोई बग नहीं - आपको बस डीएसटी के लिए खाते की आवश्यकता है। मैंने दो और तरीकों के उत्तर में जानकारी जोड़ दी है जो दिखाती है कि इसे कैसे करें। – joelparkerhenderson