位置:首页 > Ruby > Ruby中Time对象常用函数与用法总结

Ruby中Time对象常用函数与用法总结

时间:2026-08-18  |  作者:星际追番人  |  阅读:0

Ruby中的Time对象是处理日期和时间的核心工具,日常开发中几乎离不开它。今天我们就系统地过一遍它的常用函数,从基础创建到时间运算,再到格式化输出,把这些用法都理清楚。

Ruby中Time对象的常用函数总结

1、Time.at

Time.at(time[, usec])

它的作用是:给定一个时间点(可以是Time对象,也可以是自1970年1月1日以来的秒数——整数或浮点数),返回对应的Time对象。如果浮点数精度不够,可以传入第二个参数usec(微秒),它会返回 time + (usec/1000000) 表示的时间。注意,此时timeusec都必须是整数。生成的Time对象默认使用地方时。

2、Time.gm、Time.utc

Time.gm(year[, mon[, day[, hour[, min[, sec[, usec]]]]]])

Time.gm(sec, min, hour, mday, mon, year, wday, yday, isdst, zone)

Time.utc(year[, mon[, day[, hour[, min[, sec[, usec]]]]]])

Time.utc(sec, min, hour, mday, mon, year, wday, yday, isdst, zone)

这两个方法用来创建协调世界时(UTC)的Time对象。第一参数是必需的,后面的都是可选——省略的话会取最小可能值。参数也能接收字符串,比如下面这个例子:

p Time.gm *"2002-03-17".split("-")   # => Sun Mar 17 00:00:00 UTC 2002

等价于:

p Time.gm(*"2002-03-17".split("-"))

在Rails中直接用parse从字符串生成时间更顺手:

p Time.parse("2002-03-17")   # => Sun Mar 17 00:00:00 +0800 2002

3、Time.local、Time.mktime

Time.local(year[, mon[, day[, hour[, min[, sec[, usec]]]]]])

Time.local(sec, min, hour, mday, mon, year, wday, yday, isdst, zone)

Time.mktime(year[, mon[, day[, hour[, min[, sec[, usec]]]]]])

Time.mktime(sec, min, hour, mday, mon, year, wday, yday, isdst, zone)

和上面相反,这两个方法返回的是本地时区的Time对象。参数规则和Time.gm完全一样。

4、Time.new、Time.now

都返回当前时间的Time对象。唯一的区别是new会调用initialize,而now直接生成实例,日常用now就够了。

5、Time.times

Time.times   # 已废弃(obsolete)

Struct::Tms的形式返回当前进程及其子进程所消耗的CPU时间(用户态/内核态)。Struct::Tms包含以下成员,单位为秒(浮点数):

utime   # user time(用户态时间)
stime   # system time(系统态时间)
cutime  # user time of children(子进程用户态时间)
cstime  # system time of children(子进程系统态时间)

6、self + other

返回当前时间加上other秒之后的时间。例如 Time.now + 3600 就是一小时后的时间。

7、self - other

如果otherTime对象,则返回两者之间的时间差(秒数,浮点数);如果other是数值,则返回当前时间减去other秒之前的时间。

8、self <=> other

比较两个时间。other必须是Time对象或者数值(数值会被当作自纪元以来的秒数进行比较)。

9、asctime、ctime

把时间格式化为asctime风格的字符串,但不包含末尾的换行符。效果类似 "Sun Mar 17 00:00:00 2002"

10、gmt、utc

如果当前Time对象的时区是协调世界时,返回true

11、getgm、getutc

生成并返回一个新的Time对象,时区设置为UTC,原对象不变。

12、getlocal

生成并返回一个新的Time对象,时区设置为本地时区。

13、gmtime、utc

将当前Time对象的时区改为UTC,并返回self。调用后所有时间变换都按UTC处理。如果要显示UTC时间,可以这样:

now = Time.now
now.gmtime
puts now   # 输出钱TC时间

14、localtime

将当前Time对象的时区改回本地时区(默认),返回self

时间格式化指令

这些是strftime中常用的格式化符号,记住几个常用的就行,其他的查表即可:

%a星期几缩写(Sun)
%A星期几全称(Sunday)
%b月份缩写(Jan)
%B月份全称(January)
%c本地日期时间表示
%d一个月中的第几天(01–31)
%H24小时制小时(00–23)
%I12小时制小时(01–12)
%j一年中的第几天(001–366)
%m月份(01–12)
%M分钟(00–59)
%pAM/PM
%S秒(00–60)
%U周数(从第一个星期日开始,00–53)
%W周数(从第一个星期一开始,00–53)
%w星期几(0代表星期日,0–6)
%x仅日期,无时间
%X仅时间,无日期
%y不带世纪的年份(00–99)
%Y带世纪的年份
%Z时区名称

用法示例:

Time.now.strftime("%Y-%m-%d %H:%M:%S")
# => 2015-09-24 22:20:26

常用的几个记住就好,其他的用的时候查一查,完全够用。

PS:通过Time对象获取日期和时间组件

直接看实例:

time = Time.new
puts time.year    # 年份
puts time.month   # 月份(1–12)
puts time.day     # 一个月中的第几天(1–31)
puts time.wday    # 一周中的星期几(0代表星期日)
puts time.yday    # 一年中的第几天(1–366)
puts time.hour    # 24小时制小时
puts time.min     # 分钟
puts time.sec     # 秒
puts time.usec    # 微秒
puts time.zone    # 时区名称,例如 "UTC"

时间算法

now = Time.now        # 当前时间
past = now - 10       # 10秒之前(Time - 数值 = Time)
future = now + 10     # 10秒之后(Time + 数值 = Time)
diff = future - now   # 10.0(Time - Time = 秒数)

上面的运算是Ruby原生支持的。而在Rails中,我们更常用这种写法:

now = Time.now
past1 = now - 10.day
past2 = now - 10.month
past3 = now - 10.year

这些方法非常实用——10.day本质上就是 10 * 24 * 60 * 60 秒,Rails为数字类扩展了这些时间单位方法,用起来非常直观。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多