zoukankan      html  css  js  c++  java
  • Ruby Time And DateTime之Time in Core

         今天遇到一个问题,就是在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

          简单暴力。减法同理。

          

          

  • 相关阅读:
    [MacOS]Sublime text3 安装(一)
    [RHEL8]开启BBR
    PAT Advanced 1136 A Delayed Palindrome (20分)
    PAT Advanced 1144 The Missing Number (20分)
    PAT Advanced 1041 Be Unique (20分)
    PAT Advanced 1025 PAT Ranking (25分)
    PAT Advanced 1022 Digital Library (30分)
    PAT Advanced 1019 General Palindromic Number (20分)
    PAT Advanced 1011 World Cup Betting (20分)
    PAT Advanced 1102 Invert a Binary Tree (25分)
  • 原文地址:https://www.cnblogs.com/fantiantian/p/3444753.html
Copyright © 2011-2022 走看看