温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Ruby Time And DateTime之Time in Core

发布时间:2020-05-22 03:06:42 来源:网络 阅读:265 作者:Steven__Fan 栏目:编程语言

     今天遇到一个问题,就是在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方法的的定义:

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 

       看一下::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
  • ::utc

      和gm一样。

  • ::local

       出了时区有差别,其他和gm一样,看个例子:  

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

输出结果:

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

    是new的别名,也是根据当前系统时间来初始化一个时间实例。

  • ::mktime

    同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

      简单暴力。减法同理。

      

 

      

 

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI