ruby on rails - यूटीसी को स्थानीय समय में रेल 3 में कनवर्ट करें




ruby-on-rails ruby-on-rails-3 (4)

मुझे रेलवे 3 में स्थानीय समय पर यूटीसी Time या TimeWithZone को बदलने में परेशानी हो रही है।

कहें कि moment यूटीसी में कुछ Time परिवर्तनीय है (जैसे moment = Time.now.utc )। डीएसटी (यानी ईएसटी / ईडीटी का उपयोग करके) की देखभाल करते हुए, मैं अपने समय क्षेत्र में moment कैसे परिवर्तित करूं?

अधिक सटीक, मैं "सोमवार 14 मार्च, 9 पूर्वाह्न" प्रिंटआउट करना चाहता हूं, अगर समय सुबह 9 बजे ईडीटी और "सोमवार 7 मार्च, 9 पूर्वाह्न" के अनुरूप है, तो समय 9 बजे ईएसटी पिछले सोमवार था।

उम्मीद है कि एक और तरीका है?

संपादित करें : मैंने पहले सोचा था कि "ईडीटी" एक मान्यता प्राप्त टाइमज़ोन होना चाहिए, लेकिन "ईडीटी" एक वास्तविक समय क्षेत्र नहीं है, जो एक टाइमज़ोन की स्थिति की तरह है। उदाहरण के लिए, Time.utc(2011,1,1).in_time_zone("EDT") लिए पूछने का कोई अर्थ नहीं होगा। यह थोड़ा उलझन में है, क्योंकि "ईएसटी" एक वास्तविक टाइमज़ोन है, जो कुछ स्थानों पर उपयोग किया जाता है जो डेलाइट बचत समय का उपयोग नहीं करते हैं और (यूटीसी -5) सालाना हैं।


अपने सिस्टम स्थानीय क्षेत्र का उपयोग करके इसे कॉन्फ़िगर करना आसान है, बस अपने आवेदन में। आरबी इसे जोड़ें

config.time_zone = Time.now.zone

फिर, रेलों को आपको अपने लोकलटाइम में टाइमस्टैम्प दिखाना चाहिए या आप स्थानीय निर्देश प्राप्त करने के लिए इस निर्देश की तरह कुछ उपयोग कर सकते हैं

Post.created_at.localtime

पता नहीं क्यों, लेकिन मेरे मामले में यह पहले सुझाए गए तरीके से काम नहीं करता है। लेकिन यह इस तरह काम करता है:

Time.now.change(offset: "-3000")

बेशक आपको offset वैल्यू को अपने पास बदलना होगा।


वास्तव में local_time पक्ष पर ऐसा करने के लिए local_time द्वारा local_time नामक एक अच्छा मणि है, मेरा मानना ​​है:

https://github.com/basecamp/local_time


Time#localtime आपको कोड चलाने वाले मशीन के वर्तमान समय क्षेत्र में समय देगा:

> moment = Time.now.utc
  => 2011-03-14 15:15:58 UTC 
> moment.localtime
  => 2011-03-14 08:15:58 -0700 

अपडेट करें: यदि आप अपने टाइमज़ोन की बजाय विशिष्ट समय क्षेत्र में कनवर्ट करना चाहते हैं, तो आप सही रास्ते पर हैं। हालांकि, ईएसटी बनाम ईडीटी के बारे में चिंता करने की बजाय, सामान्य पूर्वी समय क्षेत्र में बस जाएं - यह दिन के आधार पर पता चलेगा कि यह ईडीटी या ईएसटी है या नहीं:

> Time.now.utc.in_time_zone("Eastern Time (US & Canada)")
  => Mon, 14 Mar 2011 11:21:05 EDT -04:00 
> (Time.now.utc + 10.months).in_time_zone("Eastern Time (US & Canada)")
  => Sat, 14 Jan 2012 10:21:18 EST -05:00 




activesupport