2009-11-26 14 views
170

रेलवे ऐप में डेट ऑब्जेक्ट से यूनिक्स टाइमस्टैम्प (1 9 70 जीएमटी के बाद से सेकंड की संख्या) कैसे प्राप्त होगा?रुबी/रेल: एक तिथि को यूनिक्स टाइमस्टैम्प में परिवर्तित करना

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

किसी भी मदद की सराहना की है, धन्यवाद!

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

उत्तर

295

कोड 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 

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

+2

डेटटाइम में 'to_utc' – Green

+10

' date.to_time.utc' शायद उसका मतलब नहीं है। –

+3

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

59

मैं जब मैं यह कोशिश निम्नलिखित मिलती है:

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

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

7

समाधान आप एक मनमाना दिनांक समय वस्तु है जब:

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

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 

यहाँ क्या होता है जब आप 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 पर कॉल करने जा रहा है टी वह गलत टाइमस्टैम्प।

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

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