मेरे पास एक टाइमस्टैम्प है जो यूटीसी में है
"2010-10-25 23:48:46 यूटीसी"
मुझे इसे आईएसओ 8601 में बदलने की आवश्यकता है
"2010-10-29 06: 09Z"
प्रलेखन नरक के रूप में भ्रमित कर रहा है - ऐसा करने का सबसे आसान तरीका क्या है?
जवाबों:
मुझे लगता है कि आप हमें बरगला रहे हैं।
आपके प्रश्न की इनपुट तिथि 25 अक्टूबर, 2010 है , जबकि आउटपुट 29 अक्टूबर, 2010 है । बहुत बढ़िया!
इस नाइट-पिकिंग थ्रेड पर जारी रहना: आपका समय भी पूरी तरह से अलग है और आप आउटपुट समय से सेकंड याद कर रहे हैं।
अब सच्चे उत्तर के लिए।
थोड़ा फैक्टॉइड हालांकि पहले: रूबी में आईएसओ 8601 आउटपुट आईएसओ 8601 के विकिपीडिया पृष्ठ से "संयुक्त तिथि और समय" आउटपुट के समान है ।
आपको एक स्ट्रिंग मिली है और इसलिए आपको इसे एक Time
ऑब्जेक्ट में बदलने की आवश्यकता होगी जिसे आप कर सकते हैं to_time
। फिर यह iso8601
आईएसओ 8601 संस्करण प्राप्त करने के लिए उस वस्तु पर कॉल करने की बात है :
"2010-10-25 23:48:46 UTC".to_time.iso8601
to_time
जबकि विधि, रेल के सौजन्य से है iso8601
रूबी के मानक पुस्तकालय के सौजन्य से है।
बहुत प्रयोग करने के बाद, मुझे टाइम लाइब्रेरी का पार्सर डेटाइम से बेहतर लगता है, हालाँकि इसके कारण मुझे फिलहाल बच जाते हैं। उस चेतावनी के साथ, मैं हमेशा इस तरह के सामान के लिए डेटटाइम के बजाय समय का उपयोग करता हूं, और रूबी प्रलेखन भी मुश्किल है क्योंकि यह ऐसा क्यों है,
require 'time'
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601
"2010-10-25T23:48:46Z"
Time.parse("...").utc.iso8601
, आपको समय के साथ प्रत्यय के समय मिलेगा +03:00
या कुछ अन्य मूल्य के आधार पर टाइमज़ोन मूल समय स्ट्रिंग के साथ दिया गया है। मैं इसके बजाय मतलब है Z
।
नोट: आपको to_time पद्धति को लागू करने से पहले एक टाइम स्ट्रिंग को टाइम ऑब्जेक्ट में बदलना (पार्स करना) है।
ruby-1.9.2-p180 :016 > "2010-10-25 23:48:46 UTC".to_time.iso8601
NoMethodError: undefined method `to_time' for "2010-10-25 23:48:46 UTC":String
from (irb):16
सही प्रक्रिया:
irb> ut = DateTime.parse("2010-10-25 23:48:46 UTC")
irb> ut.iso8601
=> "2010-10-25T23:48:46+00:00"
इस पुराने पुराने प्रश्न का उत्तर जोड़ना क्योंकि यदि आप रेल का उपयोग कर रहे हैं, तो इसे परिवर्तित करने / पार्स करने की कोई आवश्यकता नहीं है जिस तरह से अन्य उत्तर यहां आपको करने के लिए कह रहे हैं:
created_at
या updated_at
विशेषता) है, तो आप सीधेiso8601
उस टाइमस्टैम्प (जैसे, object.created_at.iso8601
) पर विधि को कॉल कर सकते हैं ।iso8601
विधि को भी दशमलव अंक प्रदर्शित करने के लिए एक संख्यात्मक तर्क स्वीकार करता है; यदि आप 2020-04-06T19:16:55.604Z
इसके बजाय चाहते हैं तो आप इसका उपयोग करेंगे 2020-04-06T19:16:55Z
।https://api.rubyonrails.org/v5.2.4/classes/ActiveSupport/TimeWithZone.html#method-i-iso8601