Time类于Date类

时间的获取

Time.new Time.now

获取当前时间的Time对象

p Time.now
sleep 1
p Time.new

t.year t.month t.day

获取时间对象中的年月日

 t = Time.now
 p t
 p t.year
 p t.month
 p t.day
方法名 意义
year
month
day
hour
min
sec
usec 毫秒
to_i unix时间戳
wday 一周中的第几天(0是星期天)
mday 一月中的第几天
yday 一年中第一天
zone 时区

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

根据指定时间获取Time对象

t = Time.mktime(2016, 1, 1, 3, 11, 12)

时间的计算

比较、运算

t1 = Time.now
sleep(10)
t2 = Time.now

p t1 < t2
#=> true

p t2 - t1
#=> 10.005073
t = Time.now
p t
#=> "2016-02-21 21:57:09 +0800"

# 一天后的时间
t2 = t + 60 * 60 * 24
p t2
#=> "2016-02-22 21:57:09 +0800"

时间的格式

t.strftime(format) t.to_s

Time#strftime中的格式字符串

格式 意义与范围
%A 星期的名称(Sunday、Monday...)
%a 星期的缩写(Sun、Mon...)
%B 月份的名称(January、February...)
%b 月份的缩写(Jan、Feb...)
%c 日期与时间
%d 日(01 ~ 31)
%H 24小时制(00 ~ 23)
%I 12小时制(01 ~ 12)
%j 一年中的天(01 ~ 366)
%M 分(00 ~ 59)
%m 表示月的数字(01 ~ 12)
%p 上午或下午(AM、PM)
%s 秒(00 ~ 60)
%U 表示周的数字。以星期天为一周的开始(00 ~ 53)
%W 表示周的数字。以星期天为一周的开始(00 ~ 53)
%w 表示星期的数字。0表示星期天(0 ~ 6)
%X 时间
%x 日期
%Y 表示西历的数字
%y 西历的后两位(00 ~ 99)
%Z 时区 (JST等)
%z 时区(+900等)
%% 原封不动的输出%
t = Time.now
p t.to_s
#=> "2016-02-21 22:09:09 +0800"

p t.strftime("%Y-%m-%d %H:%M:%S %z")
#=> "2016-02-21 22:09:09 +0800"

t.rfc2822

生成符合电子邮件头部信心中的Data

require "time"

t = Time.now
p t.rfc2822
#=> "Sun, 21 Feb 2016 22:11:05 +0800"

t.iso8601

生成符合ISO 8601国际标准时间格式的字符串

require "time"

t = Time.now
p t.iso8601
#=> "2016-02-21T22:11:57+08:00"

本地时间

t.utc t.localtime

t = Time.now
p t
#=> 2016-02-21 22:13:11 +0800

# 切换到国际协调时间(UTC)
t.utc
p t
#=> 2016-02-21 14:13:11 UTC

# 切换回本地时间
t.localtime
p t
#=> 2016-02-21 22:13:11 +0800

从字符串中获取时间

Time.parse(str)

将字符串形式的时间,转成Time对象。

require "time"

p Time.parse("Sat Mar 30 03:54:15 UTC 2013")
p Time.parse("2016/1/1")
p Time.parse("2016-01-01 03:54:15")

日期的获取

用于处理不包含时间的日期

require "date"

d = Date.today
puts d
#=> 2016-02-21

其他用法

require "date"

d = Date.today
p d.year
p d.month
p d.day
p d.wday
p d.mday
p d.yday

按指定日期生成Date对象

require "date"

d = Date.new(2016, 3, 12)
puts d

对月末日期做-1处理

require "date"

# 2月最后一天
d = Date.new(2016, 2, -1)
puts d
#=> 2016-02-29

d = Date.new(2016, 2, -2)
puts d
#=> 2016-02-28

日期的运算

require "date"

d1 = Date.new(2016, 1, 1)
d2 = Date.new(2016, 1, 4)

puts d2 - d1
#=> 3/1 (3天的意思)

d = Date.today
puts d
puts d + 1
puts d + 100
puts d - 1
puts d - 100
require "date"

d = Date.today
puts d

#下一个的相同日期
puts d >> 1

puts d >> 100

#上一个月的相同日期
puts d << 1

日期的格式

require "date"

t = Date.today

p t.strftime("%Y-%m-%d %H:%M:%S %z")
#=> "2016-02-21 00:00:00 +0000"

从字符串中获取日期

require "date"

puts Date.parse("Sat Mar 30 03:54:15 UTC 2013")
puts Date.parse("2016/1/1")
puts Date.parse("2016-01-01 03:54:15")