ruby - समय - सभी देशों का टाइम




रूबी में समय क्षेत्र ऑफ़सेट सेट करें (3)

रूबी में डिफ़ॉल्ट समय क्षेत्र ऑफसेट स्पष्ट रूप से -0800 है। मैं -0500 को मेरा सेट करना चाहता हूं। मैं यह कैसे करु?


अद्यतन उत्तर: ActiveSupport का उपयोग करें

Rails's ActiveSupport मॉड्यूल की हालिया रिलीज सक्रिय_support / टाइम मॉड्यूल में एक बेहतर समाधान प्रदान करती है। (ध्यान दें कि ActiveSupport में मॉड्यूल को सभी रेलों में खींचने के बिना लोड किया जा सकता है ...)

मैं इस दृष्टिकोण की अनुशंसा करता हूं क्योंकि इसे किसी भी वैश्विक स्थिति को स्थापित करने की आवश्यकता नहीं है (उदाहरण के लिए अपने ओएस पर समय क्षेत्र निर्धारित करना या ENV['TZ'] को संशोधित करना) जो अप्रत्याशित साइड इफेक्ट्स कहीं और हो सकता है। यहां बताया गया है कि आप इसका उपयोग कैसे करते हैं:

>> require 'active_support/time'
=> true
>> Time.at(1000000000).in_time_zone('US/Eastern')
=> Sat, 08 Sep 2001 21:46:40 EDT -04:00
>> Time.at(1000000000).in_time_zone('US/Pacific')
=> Sat, 08 Sep 2001 18:46:40 PDT -07:00

पीएस: यदि आप समर्थित सभी समय क्षेत्र नाम देखना चाहते हैं, तो आप इसका उल्लेख कर सकते हैं:

>> ActiveSupport::TimeZone::MAPPING
=> => {"International Date Line West"=>"Pacific/Midway", "Midway Island"=>"Pacific/Midway", ...}

(मूल उत्तर - अब पुराना)

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

मैं जो करता था वह था (लेकिन नीचे अपडेट देखें):

def with_time_zone(tz_name)
  prev_tz = ENV['TZ']
  ENV['TZ'] = tz_name
  yield
ensure
  ENV['TZ'] = prev_tz
end

जो चीजों की अनुमति देता है:

>> with_time_zone('US/Eastern') { puts Time.at(1000000000) }
2001-09-08 21:46:40 -0400
>> with_time_zone('US/Pacific') { puts Time.at(1000000000) }
2001-09-08 18:46:40 -0700

अपने ओएस पर समय क्षेत्र बदलें; रूबी परिवर्तन उठाएगा।


रूबी समय क्षेत्र को प्रोग्रामेटिक रूप से सेट करने के लिए, ENV हैश तक पहुंचकर रूबी के भीतर से पर्यावरण चर सेट करें:

ENV['TZ'] = 'UTC'
Time.at 0
#=> 1970-01-01 00:00:00 +0000

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







time