यदि मेरे पास है d = DateTime.now, तो मैं 'd' को UTC (उपयुक्त तिथि के साथ) में कैसे परिवर्तित करूँ?
जवाबों:
d = DateTime.now.utc
ऊप्स!
यह रेल में काम करने लगता है, लेकिन वेनिला रूबी (और निश्चित रूप से वही है जो सवाल पूछ रही है)
d = Time.now.utc
हालांकि काम करता है।
क्या कोई कारण है जिसका आपको उपयोग करने की आवश्यकता है DateTimeऔर नहीं Time? Timeआप की जरूरत है सब कुछ शामिल करना चाहिए:
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
DateTime.now.new_offset(0)
रूबी में काम करेगा (यानी ActiveSupport के बिना)।
new_offsetविधि तर्क 0पहले से ही डिफॉल्ट करता है । तो DateTime.now.new_offsetभी इस्तेमाल किया जा सकता है।
दुर्भाग्य से, डेटटाइम क्लास के पास ऐसा करने के लिए समय वर्ग में सुविधा के तरीके उपलब्ध नहीं हैं। आप किसी भी DateTime वस्तु को UTC में इस तरह परिवर्तित कर सकते हैं:
d = DateTime.now
d.new_offset(Rational(0, 24))
आप UTC से स्थानीय समय के बाद वापस स्विच कर सकते हैं:
d.new_offset(DateTime.now.offset)
dUTC समय में दिनांक समय ऑब्जेक्ट कहाँ है। यदि आप इन्हें सुविधा विधियों के रूप में पसंद करते हैं, तो आप इन्हें इस तरह बना सकते हैं:
class DateTime
def localtime
new_offset(DateTime.now.offset)
end
def utc
new_offset(Rational(0, 24))
end
end
आप इसे निम्नलिखित irb सत्र में कार्रवाई में देख सकते हैं:
d = DateTime.now.new_offset(Rational(-4, 24))
=> #<DateTime: 106105391484260677/43200000000,-1/6,2299161>
1.8.7 :185 > d.to_s
=> "2012-08-03T15:42:48-04:00"
1.8.7 :186 > d.localtime.to_s
=> "2012-08-03T12:42:48-07:00"
1.8.7 :187 > d.utc.to_s
=> "2012-08-03T19:42:48+00:00"
जैसा कि आप ऊपर देख सकते हैं, प्रारंभिक DateTime ऑब्जेक्ट में -04: 00 ऑफसेट (पूर्वी समय) है। मैं -07: 00 ऑफसेट के साथ प्रशांत समय में हूं। कॉलिंग localtimeजैसा कि पहले ठीक से वर्णित स्थानीय समय में दिनांक समय वस्तु बदल देता है। utcऑब्जेक्ट पर कॉल करना ठीक से इसे यूटीसी ऑफसेट में कनवर्ट करता है।
यदि आप चाहते हैं Time.nowऔर DateTime.nowयूटीसी समय में जवाब देने के लिए आप एक ईएनवी सेट कर सकते हैं ।
require 'date'
Time.now #=> 2015-11-30 11:37:14 -0800
DateTime.now.to_s #=> "2015-11-30T11:37:25-08:00"
ENV['TZ'] = 'UTC'
Time.now #=> 2015-11-30 19:37:38 +0000
DateTime.now.to_s #=> "2015-11-30T19:37:36+00:00"