2010-10-30 15 views
73

में मैं एक टाइमस्टैम्प यूटीसी में है कि हैआईएसओ 8601 के लिए यूटीसी टाइमस्टैम्प परिवर्तित रूबी

"2010-10-25 23:48:46 यूटीसी"

मैं इसे आईएसओ में परिवर्तित करने की जरूरत है 8601

"2010-10-29 06: 09Z"

दस्तावेज नरक के रूप में भ्रमित है - ऐसा करने का सबसे आसान तरीका क्या है?

उत्तर

153

मुझे लगता है कि आप हमें चाल करने की कोशिश कर रहे हैं। जबकि उत्पादन 29 वें अक्टूबर के, 2010 है

अपने प्रश्न का इनपुट तारीख, अक्टूबर, 2010 की 25 वीं है। बहुत बढ़िया!

इस नाइट-पिकिंग थ्रेड पर जारी रखना: आपके समय भी पूरी तरह से अलग हैं और आप आउटपुट समय से सेकंड गुम हैं।

अब सही उत्तर के लिए।

पहले थोड़ा सा तथ्य: हालांकि रूबी में आईएसओ 8601 आउटपुट ISO 8601's Wikipedia page से "संयुक्त तिथि और समय" आउटपुट के समान है।

आपके पास एक स्ट्रिंग है और इसलिए आपको इसे Time ऑब्जेक्ट में परिवर्तित करना होगा जिसे आप to_time के साथ कर सकते हैं। तो फिर यह केवल उस वस्तु पर iso8601 बुला आईएसओ 8601 संस्करण प्राप्त करने की बात है:

"2010-10-25 23:48:46 UTC".to_time.iso8601 

to_time विधि, रेल के सौजन्य से है, जबकि iso8601 रूबी के मानक पुस्तकालय की courtest है।

+5

अच्छा जवाब कठिन है, लेकिन मैं पहली बार नहीं मिला भाग (क्या हास्य होना चाहिए था?) –

+3

अरे! आपने लोगों को धोखा देने के लिए अपनी साजिश के माध्यम से देखा। = पी महान उत्तर के लिए धन्यवाद, मुझे आश्चर्य है कि वे सिर्फ दस्तावेज में क्यों नहीं लिखते हैं! –

+7

@ मार्क थॉमस: हाँ यह हास्य होना चाहिए था। उन्होंने एक इनपुट और एक आउटपुट समय दिया जो कभी मेल नहीं खाएगा। Tricksie थोड़ा hobbit! –

2

नोट: आपको टाइम टाइम ऑब्जेक्ट को लागू करने से पहले एक समय स्ट्रिंग को एक समय स्ट्रिंग में परिवर्तित करना होगा।

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" 
17

ज्यादा प्रयोग करने के बाद, मैं समय लाइब्रेरी की पार्सर दिनांक समय की तुलना में बेहतर है, हालांकि कारणों मुझे इस समय बच पाते हैं। कि चेतावनी के साथ, मैं हमेशा समय बल्कि दिनांक समय से सामान के इस तरह के प्रयोग करते हैं, और गहरे लाल रंग का प्रलेखन भी करने के लिए यह क्यों इतना है के रूप में grok की

require 'time' 
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601 
"2010-10-25T23:48:46Z" 
+2

अच्छा शुद्ध रूबी समाधान। बस जोड़ना चाहते हैं, अगर मूल समय यूटीसी नहीं है, तो आप यह चाहते हैं: 'Time.parse (" ... ")। Utc।iso8601', अन्यथा आपको समय-समय पर '+03: 00' के साथ प्रत्ययित समय मिलेगा या टाइमज़ोन मूल समय स्ट्रिंग के आधार पर कुछ अन्य मूल्य दिया जाएगा। मेरा मतलब है 'ज़ेड' के बजाय। – akostadinov

संबंधित मुद्दे