溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Ruby Time And DateTime之Time in Core

發(fā)布時(shí)間:2020-05-22 03:06:42 來源:網(wǎng)絡(luò) 閱讀:258 作者:Steven__Fan 欄目:編程語言

     今天遇到一個(gè)問題,就是在Ruby中對于Time和DateTime的使用,不是很明了,現(xiàn)在研究一下:

     先說Time: 在Ruby2.0中關(guān)于Time有兩處定義一個(gè)是在Core中,http://www.ruby-doc.org/core-2.0.0/Time.html,一個(gè)是在stdlib中,先說在核心模塊中的Time。http://www.ruby-doc.org/stdlib-2.0.0/libdoc/time/rdoc/Time.html 后者是對前者的擴(kuò)展。

      Time是對日期和時(shí)間的一個(gè)抽象,其實(shí)內(nèi)部保存的是從1970年1月1日到現(xiàn)在的時(shí)間差。

      下面通過Time的類方法的例子熟悉一下Time如何創(chuàng)建一個(gè)Time實(shí)例: 

  •    ::new

          先看一下::new方法的的定義:

new → time   new(year, month=nil, day=nil, hour=nil, min=nil, sec=nil, utc_offset=nil) → time

          可以通過new方法來根據(jù)系統(tǒng)時(shí)間創(chuàng)建一個(gè)Time實(shí)例,就是沒有參數(shù)的情況對應(yīng)new → time

1 puts Time.new 

          輸出結(jié)果:   

1 2013-11-27 00:04:28 +0800

        也可以在通過::new來創(chuàng)建實(shí)例的時(shí)候,指定時(shí)間的一部分,例如年,月,日等信息,對應(yīng)new(year, month=nil, day=nil, hour=nil, min=nil, sec=nil, utc_offset=nil) → time,通過這種方式來創(chuàng)建Time實(shí)例的時(shí)候必須要傳遞參數(shù)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")

          輸出結(jié)果:

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

         這里面比較有意思的事情就是在創(chuàng)建Time實(shí)例的時(shí)候就可以制定時(shí)區(qū),很方便。其實(shí)也可以通過Time的gm.local,utc方法來制定時(shí)區(qū)。下面做一下介紹.

  • ::gm 

       看一下::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的信息是必須填寫的,剩下的就是一些小的細(xì)節(jié)比如月份的數(shù)值必須是1..12,小時(shí)的數(shù)值必須是0..23,所以就不逐一舉例。只是舉個(gè)例子來說明一下它的作用: 

1 puts Time.utc(2000,"jan",1,20,15,1)  2 puts Time.gm(2000,"jan",1,20,15,1)

 輸出結(jié)果:

1 2000-01-01 20:15:01 UTC  2 2000-01-01 20:15:01 UTC
  • ::utc

      和gm一樣。

  • ::local

       出了時(shí)區(qū)有差別,其他和gm一樣,看個(gè)例子:  

1 puts Time.local(2000,"jan",1,20,15,1)

輸出結(jié)果:

1 2000-01-01 20:15:01 +0800
  • ::now

    是new的別名,也是根據(jù)當(dāng)前系統(tǒng)時(shí)間來初始化一個(gè)時(shí)間實(shí)例。

  • ::mktime

    同local

獲取到Time實(shí)例以后就看看我們能用這些實(shí)例做點(diǎn)什么吧:

     前面已經(jīng)提到Time其實(shí)就是保存的從1970年1月1號到現(xiàn)在的時(shí)間差,單位為秒,如此說來我們做時(shí)間運(yùn)算應(yīng)該比較簡單,下面通過Time實(shí)例方法的兩個(gè)列子,Ruby的時(shí)間操作簡單到令人發(fā)指:

      首先我們試想一下既然Time實(shí)例中存放的是一個(gè)時(shí)間差,那么我們對它進(jìn)行加減法操作就會按照我們預(yù)期的設(shè)想得到結(jié)果??催@個(gè)例子: 

1 puts t = Time.now  2 puts t1 = t + (60 * 60 * 24)

       輸出結(jié)果:

1 2013-11-27 00:47:25 +0800  2 2013-11-28 00:47:25 +0800

      簡單暴力。減法同理。

      

 

      

 

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI