Ruby中的时间

Posted on March 17, 2014

在ruby中每次遇到时间问题都要去google,还是记一下笔记吧

关于时间的名词

  • GMT: 是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。 (好像也叫UT)

  • UTC: (Universal Time/Temps Cordonné 世界标准时间)

  • CST: (Central Standard Time 国家标准时间,一说中原标准时间); 中国标准时间(China Standard Time)

    CST却同时可以代表如下 4 个不同的时区:

    Central Standard Time (USA) UT-6:00

    Central Standard Time (Australia) UT+9:30

    China Standard Time UT+8:00

    Cuba Standard Time UT-4:00

    GMT + 8 = UTC + 8 = CST

    姑且认为GMT等于UTC(2者的区别和闰秒有关,暂时不管), CST可以认为是中国本地时间

  • There are two Time classes. There’s one that is part of core Ruby and there is an additional Time class that is part of the standard library

core Ruby Time

新纪元(Epoch)1970-01-01 00:00:00 UTC

类方法

  • .at

    at(time) 返回一个相同的时间

    at(second) 返回相对新纪元偏移second的一个时间,时区会转好成当前时区

  • .gm/.utc 返回一个UTC (GMT)时间

    gm(year[, month, day, hour, min, sec, usec_with_frac])

    gm(sec, min, hour, day, month, year, wday, yday, isdst, tz)

  • .local 参数同.gm 但是会解释成本地时区时间

  • .mktime 同 .local

  • .new([year, month=nil, day=nil, hour=nil, min=nil, sec=nil, utc_offset=nil])

    如果没有utc_offset( It is a string such as “+09:00” or a number of seconds such as 32400),将生成本地时区时间

    如果没有参数将解释当前时间

  • .now 以当前时区返回当前时间

实例方法

  • +

    time + numeric → time

  • -

    time - other_time → float

    time - numeric → time

  • <=>

    time <=> other_time → -1, 0, +1 or nil

  • asctime 返回典型时间字符串, 不包括时区,如 “Wed Apr 9 08:56:03 2003”

  • ctime 同asctime

  • getgm/getutc 返回一个新的等价的UTC时间

  • gmt?/utc? 判断是否是 UTC (GMT).格式

  • getlocal

    getlocal 返回一个新的等价的本地时间

    getlocal(utc_offset) 返回一个新的等价的(带有当地时区)本地时间

  • gmt_offset/utc_offset/gmtoff 返回该时间的时区和UTC时区的秒差(即时区的秒差)

  • utc/gmtime 这是一个bang! 方法,修改自身,转换成等价的utc时间

  • localtime 是一个bang! 方法

    localtime 修改自身为本地时区时间

    localtime(utc_offset) 修改自身为等价的(带有当地时区)本地时间

  • zone 返回时区

  • year

  • mon/month (1..12)

  • day/mday 返回日期(1..n)

  • yday (1..366)

  • wday 星期的索引 0..6

  • hour (0..23)

  • min (0..59)

  • sec (0..60)

  • monday? … friday? …

  • succ 返回一个新的一下秒的时间

  • strftime TODO

  • to_a 返回格式 [ sec, min, hour, day, month, year, wday, yday, isdst, zone ]

  • to_i 距离新纪元的秒数

  • to_s

    对于UTC时间等价于 strftime(“%Y-%m-%d %H:%M:%S UTC”)

    对于CST时间等价于 strftime(“%Y-%m-%d %H:%M:%S %z”)

参考资料

http://www.ruby-doc.org/core-1.9.3/Time.html