Ruby中Time对象常用函数与用法总结
时间:2026-08-18 | 作者:星际追番人 | 阅读:0Ruby中的Time对象是处理日期和时间的核心工具,日常开发中几乎离不开它。今天我们就系统地过一遍它的常用函数,从基础创建到时间运算,再到格式化输出,把这些用法都理清楚。
1、Time.at
Time.at(time[, usec])
它的作用是:给定一个时间点(可以是Time对象,也可以是自1970年1月1日以来的秒数——整数或浮点数),返回对应的Time对象。如果浮点数精度不够,可以传入第二个参数usec(微秒),它会返回 time + (usec/1000000) 表示的时间。注意,此时time和usec都必须是整数。生成的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
如果other是Time对象,则返回两者之间的时间差(秒数,浮点数);如果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) |
| %H | 24小时制小时(00–23) |
| %I | 12小时制小时(01–12) |
| %j | 一年中的第几天(001–366) |
| %m | 月份(01–12) |
| %M | 分钟(00–59) |
| %p | AM/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为数字类扩展了这些时间单位方法,用起来非常直观。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 使用RVM切换Ruby与Rails版本的实现方法
- 时间:2026-08-18
-
- Ruby语言是什么及入门使用方法
- 时间:2026-08-18
-
- Ruby on Rails网站项目搭建入门指南
- 时间:2026-08-18
-
- Ruby插入排序算法实现与二路插入排序代码示例
- 时间:2026-08-18
-
- Ruby图片滤镜算法实现代码与核心原理
- 时间:2026-08-18
-
- Ruby中Hash哈希结构基本操作方法详解
- 时间:2026-08-18
-
- Ruby面向对象编程:类方法与类扩展详解
- 时间:2026-08-18
-
- Ruby正则表达式语法详解与常用示例代码
- 时间:2026-08-18
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
