स्ट्रिंग को डेटाइम में बदलें


100

मुझे स्ट्रिंग को डेटटाइम ऑब्जेक्ट में पार्स करने की आवश्यकता है:
30/Nov/2009:16:29:30 +0100

क्या इसे करने का कोई आसान तरीका है?

पुनश्च: मैं ऊपर स्ट्रिंग को रूपांतरित करना चाहता हूं। वर्ष के बाद बृहदान्त्र एक टाइपो नहीं है। मैं रूबी के साथ समस्या को हल करना चाहता हूं न कि आरओआर को।

जवाबों:


100

DateTime.strptime आपको प्रारूप निर्दिष्ट करने और स्ट्रिंग को डेटाइम में बदलने की अनुमति देता है।


1
धन्यवाद। याद किया, कि मैं इसे अपना स्वरूप दे सकता हूं। यहाँ काम कर रहा है: '% d /% b /% Y:% H:% M:% S'
SkaveRat

1
@SkaveRat क्या आपका स्ट्रिंग टाइमज़ोन का सम्मान करता है? मैं का उपयोग करें%d/%b/%Y:%H:%M:%S %Z
नूट

4
उपलब्ध प्रारूप संक्षिप्त सूची की सूची के लिए gist.github.com/halloffame/5350249
Ryan

9
यह स्ट्रिंग के रूपांतरण के उदाहरण को निर्दिष्ट करने के लिए विनम्र होगा, जो उपयोगकर्ता ने पूछा, न केवल "वहां पढ़ें" (जहां रास्ते से जानकारी के टन)। Stackoverflow लोकप्रिय नहीं है क्योंकि यह बाहरी प्रलेखन के लिए लिंक देता है, लेकिन सवालों के जवाब देता है
डैनियल Garmoshka

क्या "सटीक मिलान" करने का कोई तरीका है? वर्तमान में व्यवहार "शुरुआत से मेल %Yखा रहा है ", इसलिए दोनों 2015(जैसा कि अपेक्षित है) से मेल खाता है और 2016-foo-barजब से यह देखता है तब रुक जाता है 2016। यह व्यवहार सी प्रतिपक्ष के अनुरूप है; हालाँकि, सी फ़ंक्शन मैच के अंत की स्थिति लौटाता है (उदाहरण के -लिए "2016" मामले में पहला ) यह तय करने के लिए कि क्या मैच सटीक है; रूबी में यह एक रिटर्न देता है DateTime, इसलिए हम यह नहीं बता सकते हैं कि क्या इसके बाद भी कुछ है।
फ्रैंकलिन यू

97

यह भी काम नहीं करना चाहिए?

"30/Nov/2009 16:29:30 +0100".to_datetime

1
रेल 3.2.3 रूबी 1.9.3 का उपयोग करने में अच्छी तरह से काम करता है ... "2012-05-16 02:30 यूटीसी" .to_datetime => बुध, 16 मई 2012 02:30:00 +0000
Tilo

58
यह भी रूबी विधि पर एक रूबी है, रूबी विधि नहीं है।
जैक

5
यह होना चाहिए: require 'active_support/all' और फिर "30/Nov/2009 16:29:30 +0100".to_datetime (आपको वास्तव में सभी active_support एक्सटेंशन की आवश्यकता नहीं है, लेकिन सौभाग्य से यह पता चलता है कि किन लोगों को चयन करने की आवश्यकता है)
मैट Zukowski

2
ActiveSupport को बहुत अच्छी तरह से बाहर रखा गया है, लेकिन कम से कम प्रभाव के लिए, यह आप सभी to_datetimeको Stringवस्तुओं में शामिल करने की आवश्यकता होनी चाहिए :require 'active_support/core_ext/string/conversions'
xentek

3
सवाल "30 / Nov / 2009: 16: 29: 30 +0100" और "30 / Nov / 2009 16:29:30 +0100" के बारे में नहीं है। यही कारण है कि यह काम नहीं करता है।
schmijos

46

मुझे इसके साथ सफलता मिली है:

require 'time'
t = Time.parse(some_string)

15

मैंने Time.parse("02/07/1988")कुछ अन्य पोस्टरों की तरह इस्तेमाल किया ।

एक दिलचस्प गोचर था जिसे Timeआईआरबी द्वारा खोलने पर मुझे डिफ़ॉल्ट रूप से लोड किया Time.parseगया था , लेकिन परिभाषित नहीं किया गया था। मुझे require 'time'इसे काम पर लाना था।

वह रूबी 2.2 के साथ है।


12

यह स्ट्रिंग को डेटटाइम में बदल देगा:

"05/05/2012".to_time

20
यह रूबी विधि पर रूबी है, रूबी विधि नहीं है।
जैक

1
हालांकि यह इस सवाल का जवाब नहीं था, लेकिन इससे मुझे एक गुच्छा मिला। धन्यवाद @ user1425976
कर्लिंग


5

रूबी 1.8 में, ParseDate मॉड्यूल इसे और कई अन्य दिनांक / समय प्रारूपों को रूपांतरित करेगा। हालांकि, यह वर्ष और घंटे के बीच बृहदान्त्र के साथ शान से व्यवहार नहीं करता है। यह मानते हुए कि बृहदान्त्र एक टाइपो है और वास्तव में एक स्थान है, तब:

#!/usr/bin/ruby1.8

require 'parsedate'

s = "30/Nov/2009 16:29:30 +0100"
p Time.mktime(*ParseDate.parsedate(s))    # =>  Mon Nov 30 16:29:30 -0700 2009

1

आप किसी दिए गए टाइमज़ोन के साथ डेट टाइम स्ट्रिंग भी पार्स कर सकते हैं:

zone = "Pacific Time (US & Canada)"
ActiveSupport::TimeZone[zone].parse("2020-05-24 18:45:00")
=> Sun, 24 May 2020 18:45:00 PDT -07:00
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.