我一直在嘗試Time.parse()和Date.parse(),但看不出來弄明白。如何在ISO中將ISO 8601日期轉換爲UNIX時間戳?
我需要將窗體「2007-12-31 23:59:59」中的日期轉換爲UNIX時間戳。像PHP的strtotime()函數就是完美的。
我一直在嘗試Time.parse()和Date.parse(),但看不出來弄明白。如何在ISO中將ISO 8601日期轉換爲UNIX時間戳?
我需要將窗體「2007-12-31 23:59:59」中的日期轉換爲UNIX時間戳。像PHP的strtotime()函數就是完美的。
你所以你的情況有Ruby 1.9的Time.strptime
,
>> time = Time.strptime('2007-12-31 23:59:59', '%Y-%m-%d %H:%M:%S')
=> 2007-12-31 23:59:59 +0000
一旦你有一個Time
對象,你可以將其轉換爲多種格式。一個簡單的time.to_i
會給你一個Unix時間戳。
您可以使用'date.to_time.to_i'將日期時間轉換爲unix時間戳。
以下是軌控制檯上的輸出: -
日期= Date.today =>週四,2010年9月23日 日期 =>週四,2010年9月23日 date.to_time.to_i => 1285180200個
謝謝,Anubhaw
可以使用strftime
方法
日期= Date.today#這將返回星期四,2010年9月23日 str_date = date.strftime( '%B%d%Y')#這將給2010年9月23日
指這對更好地理解 blog
這將幫助你轉換一次的自定義格式。但它不適用於您的情況,即將其轉換爲UNIX時間戳。
您給出的示例的ISO 8601時間格式爲「2007-12-31T23:59:59」,而不是「2007-12-31 23:59:59」(注意數據和時間之間的T
組件)。
在Ruby中,如果您需要time
庫,則可以解析正確格式化的ISO 8601日期。如果你的日期到來與空間,而不是T
的日期從時間分開,只是把它傳遞給Time.iso8601
前將其替換:
>> require 'time'
=> true
>> Time.iso8601("2007-12-31 23:59:59".sub(/ /,'T'))
=> Mon Dec 31 23:59:59 -0500 2007
要以這種格式轉換的時間爲Unix時間戳,只需使用.to_i
:
>> Time.iso8601("2007-12-31 23:59:59".sub(/ /,'T')).to_i
=> 1199163599
如果您需要更多的靈活性,左右格式,Time.parse
應該做的伎倆;但是,我會在生產代碼中使用它,因爲它可能會給出意外的錯誤或無效輸入值,而不是拋出異常。
原來所有我需要的是:
Time.parse(DATE_STR)。to_i
我應該澄清說我需要這個在rails中工作。 – 2010-09-23 05:05:27
那麼這在鋼軌中有效。以下是出帶上軌控制檯>>日期= Date.today =>週四,2010年09月23 >>日期 =>週四,2010 月23日>> date.to_time.to_i => 1285180200 – Anubhaw 2010-09-23 05:07:35