您好,登錄后才能下訂單哦!
今天遇到一個問題,就是在Ruby中對于Time和DateTime的使用,不是很明了,現在研究一下:
先說Time: 在Ruby2.0中關于Time有兩處定義一個是在Core中,http://www.ruby-doc.org/core-2.0.0/Time.html,一個是在stdlib中,先說在核心模塊中的Time。http://www.ruby-doc.org/stdlib-2.0.0/libdoc/time/rdoc/Time.html 后者是對前者的擴展。
Time是對日期和時間的一個抽象,其實內部保存的是從1970年1月1日到現在的時間差。
下面通過Time的類方法的例子熟悉一下Time如何創建一個Time實例:
先看一下::new方法的的定義:
new → time new(year, month=nil, day=nil, hour=nil, min=nil, sec=nil, utc_offset=nil) → time
可以通過new方法來根據系統時間創建一個Time實例,就是沒有參數的情況對應new → time:
1 puts Time.new
輸出結果:
1 2013-11-27 00:04:28 +0800
也可以在通過::new來創建實例的時候,指定時間的一部分,例如年,月,日等信息,對應new(year, month=nil, day=nil, hour=nil, min=nil, sec=nil, utc_offset=nil) → time,通過這種方式來創建Time實例的時候必須要傳遞參數year。如下:
1 puts Time.new(2002) 2 puts Time.new(2002, 10) 3 puts Time.new(2002, 10, 31) 4 puts Time.new(2002, 10, 31, 2, 2, 2, "+02:00")
輸出結果:
1 2002-01-01 00:00:00 +0800 2 2002-10-01 00:00:00 +0800 3 2002-10-31 00:00:00 +0800 4 2002-10-31 02:02:02 +0200
這里面比較有意思的事情就是在創建Time實例的時候就可以制定時區,很方便。其實也可以通過Time的gm.local,utc方法來制定時區。下面做一下介紹.
看一下::gm的定義:
1 gm(year) → time 2 gm(year, month) → time 3 gm(year, month, day) → time 4 gm(year, month, day, hour) → time 5 gm(year, month, day, hour, min) → time 6 gm(year, month, day, hour, min, sec_with_frac) → time 7 gm(year, month, day, hour, min, sec, usec_with_frac) → time 8 gm(sec, min, hour, day, month, year, wday, yday, isdst, tz) → time
gm的重載比new多一些,但是看起來也很好理解,同樣需要year的信息是必須填寫的,剩下的就是一些小的細節比如月份的數值必須是1..12,小時的數值必須是0..23,所以就不逐一舉例。只是舉個例子來說明一下它的作用:
1 puts Time.utc(2000,"jan",1,20,15,1) 2 puts Time.gm(2000,"jan",1,20,15,1)
輸出結果:
1 2000-01-01 20:15:01 UTC 2 2000-01-01 20:15:01 UTC
和gm一樣。
出了時區有差別,其他和gm一樣,看個例子:
1 puts Time.local(2000,"jan",1,20,15,1)
輸出結果:
1 2000-01-01 20:15:01 +0800
是new的別名,也是根據當前系統時間來初始化一個時間實例。
同local
獲取到Time實例以后就看看我們能用這些實例做點什么吧:
前面已經提到Time其實就是保存的從1970年1月1號到現在的時間差,單位為秒,如此說來我們做時間運算應該比較簡單,下面通過Time實例方法的兩個列子,Ruby的時間操作簡單到令人發指:
首先我們試想一下既然Time實例中存放的是一個時間差,那么我們對它進行加減法操作就會按照我們預期的設想得到結果。看這個例子:
1 puts t = Time.now 2 puts t1 = t + (60 * 60 * 24)
輸出結果:
1 2013-11-27 00:47:25 +0800 2 2013-11-28 00:47:25 +0800
簡單暴力。減法同理。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。