रूबी / रेल्स: एक तिथि को एक यूनिक्स टाइमस्टैम्प में परिवर्तित करना


202

एक रेल एप्लिकेशन में दिनांक ऑब्जेक्ट से मुझे UNIX टाइमस्टैम्प (1970 GMT के बाद सेकंड की संख्या) कैसे मिलेगी?

मुझे पता है कि Time#to_iएक टाइमस्टैम्प लौटाता है, लेकिन कर रहा है Date#to_timeऔर टाइमस्टैम्प परिणाम प्राप्त कर रहा है जो लगभग एक महीने से बंद है (निश्चित रूप से क्यों ...)।

हर प्रकार की सहायता का स्वागत है, धन्यवाद!

संपादित करें: ठीक है, मुझे लगता है कि मुझे यह समझ में आया था- मैं एक लूप में कई बार डेट को प्रोसेस कर रहा था, और हर बार डेट को टाइम ज़ोन मिसमैच की वजह से थोड़ा बढ़ा दिया गया था, जो आखिरकार मेरे टाइमस्टैम्प का एक महीना हो गया। फिर भी, मुझे यह जानने में दिलचस्पी होगी कि क्या कोई ऐसा तरीका है जिस पर भरोसा किए बिना ऐसा करना है Date#to_time

जवाबों:


350

कोड date.to_time.to_iठीक काम करना चाहिए। नीचे दिया गया रेल कंसोल सत्र एक उदाहरण दिखाता है:

>> Date.new(2009,11,26).to_time
=> Thu Nov 26 00:00:00 -0800 2009
>> Date.new(2009,11,26).to_time.to_i
=> 1259222400
>> Time.at(1259222400)
=> Thu Nov 26 00:00:00 -0800 2009

ध्यान दें कि इंटरमीडिएट डेटटाइम ऑब्जेक्ट स्थानीय समय में है, इसलिए टाइमस्टैम्प आपकी अपेक्षा से कई घंटे दूर हो सकता है। यदि आप UTC समय में काम करना चाहते हैं, तो आप DateTime की विधि "to_utc" का उपयोग कर सकते हैं।


3
दिनांक समय नहीं हैto_utc
ग्रीन

12
date.to_time.utcशायद उसका यही मतलब है।
एडम एबरलिन

3
ActiveSupport के माध्यम से रेल में, एक डेटटाइम इंस्टेंस एक utc () विधि (भी getutc के लिए उपनाम) है
गोकुल

71

जब मैं इसे आज़माता हूं तो मुझे निम्नलिखित मिलता है:

>> Date.today.to_time.to_i
=> 1259244000
>> Time.now.to_i
=> 1259275709

इन दोनों संख्याओं के बीच का अंतर इस तथ्य के कारण है कि Dateवर्तमान समय के घंटे, मिनट या सेकंड को स्टोर नहीं करता है। वसीयत Dateको परिवर्तित करने Timeका परिणाम उस दिन, मध्यरात्रि में होगा।


9

स्थानीय समय ऑफसेट का उपयोग करने to_utcया utcठीक करने के सुझाए गए विकल्प काम नहीं करते हैं। मेरे लिए मैंने Time.utc()सही तरीके से काम किया और पाया कि कोड में कम चरण शामिल हैं:

> Time.utc(2016, 12, 25).to_i
=> 1482624000 # correct

बनाम

> Date.new(2016, 12, 25).to_time.utc.to_i
=> 1482584400 # incorrect

यहाँ तब होता है जब आप उपयोग करने के बाद utc कहते हैं Date...।

> Date.new(2016, 12, 25).to_time
=> 2016-12-25 00:00:00 +1100 # This will use your system's time offset
> Date.new(2016, 12, 25).to_time.utc
=> 2016-12-24 13:00:00 UTC

... तो स्पष्ट रूप से कॉलिंग to_iगलत टाइमस्टैम्प देने जा रही है।


8

रूबी 1.8 के लिए समाधान जब आपके पास एक मनमाना DateTime वस्तु है:

1.8.7-p374 :001 > require 'date'
 => true 
1.8.7-p374 :002 > DateTime.new(2012, 1, 15).strftime('%s')
 => "1326585600"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.