2014年2月13日 星期四

Ruby,Time.new(自定時間格式)

Ruby 製作Time物件時,必須遵守一定的格式,譬如

Time.new(2014, 2, 13, 16, 30, 30, "+08:00") #=> 2014-02-13 16:30:30 +0800

Time.new裡頭接受的參數從年,月,日,時,分,秒,時區,沒填的就預設是0,全部都沒填,那就給系統當前時間。那問題如果我們得到的時間是一個字串呢?例如我們有一個時間字串:

2014-02-13 16:50:47 +0800

這串文字當參數傳到到Time.new裡面只會出現錯誤訊息,難道要開始做苦工先字串解析,在放到Time.new裡面嗎?

Time.strptime

用到字串解析也就太辛苦了,Ruby 的Time class提供一個strptime方法,可以直接定義time format,require 'time'之後就可以使用了直接舉個例子:

require 'time'

t = Time.strptime("2014-02-13 16:50:47 +0800", "%Y-%m-%d %H:%M:%S %z") 
# => 2014-02-13 16:50:47 +0800

t.class # => Time

就直接得到了Time物件了,省去了字串解析的麻煩。

如果你需要的DateTime物件,也可以依法炮製:

require 'time'

dt = DateTime.strptime("2014-02-13 16:50:47 +0800", "%Y-%m-%d %H:%M:%S %z") 
# => #<DateTime: 2014-02-13T16:50:47+08:00 ((2456702j,31847s,0n),+28800s,2299161j)>

dt.class # => DateTime 

一樣可以直接得到DateTime物件。

如此就可以從各式各樣的時間格式,直接產生TimeDateTime物件了。來試個怪怪的格式:

time = Time.strptime("22日2008年06月 16-50::23", "%d日%Y年%m月 %M-%S::%H")
# => 2008-06-22 23:16:50 +0800

呵呵 怪怪的格式也沒問題了

沒有留言:

張貼留言