時間・日付の扱い

今の時間・日付をとる

time = Time.now

p time #=> Tue Oct 10 18:12:34 +0900 2006
p time.year #> 2006
p time.month #> 10
p time.day #> 10
p time.wday #> 2
p time.yday #> 283
p time.hour #> 18
p time.min #> 12
p time.sec #> 34
p time.zone #> GMT+9:00
wday
0(日曜日)から6(土曜日)
yday
1月1日を1とした通算日
zone
タイムゾーンをあらわす文字列

文字列からTimeを作成する

require 'parsedate'
require 'time'

Time.parse("16:30")
Time.parse("10/11")
Time.parse("2006/10")

時間の差を求める

start = Time.now
finish = Time.now
p finish - start #=> 1.000

時間の加減をする

time = Time.now #=> Tue Oct 10 18:12:34 +0900 2006
time + 1        #=> Tue Oct 10 18:12:35 +0900 2006
time + 60*60*24 #=> Tue Oct 11 18:12:34 +0900 2006

文字列に変換する

time = Time.now
p time.strftime("%Y %B %d(%a)") #=> 2006 October 10(Tue)
%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 年中の通算日(001-366)
%M 分(00-59)
%m 月を表す数字(01-12)
%p 午前または午後(AM,PM)
%S 秒(00-60) (60はうるう秒)
%U 週を表す数。最初の日曜日が第1週の始まり(00-53)
%W 週を表す数。最初の月曜日が第1週の始まり(00-53)
%w 曜日を表す数。日曜日が0(0-6)
%X 時刻
%x 日付
%Y 西暦を表す数
%y 西暦の下2桁(00-99)
%Z タイムゾーン trap
%% %自身

現在の日付を求める

require 'date'

Date.today #=>

文字列からDateを作成する

require 'date'
day = Date.parse("2000-8-10")
p day.to_s #=> 2006-10-10

その他にも以下のようなパターンが使える

Sat
Saturday
1999-08-28
21:45:09
09:45:09 PM
1999-08-28T21:45:09+0900
19990828 214509
H11.08.28T21:45:09Z
Sat Aug 28 21:45:09 1999
Sat Aug 28 21:45:09 JST 1999
Sat, 28 Aug 1999 21:45:09 -0400
Saturday, 28-Aug-99 21:45:09 GMT
08/28/1999
1999/08/28

n月前/n月後/n日前/n日後を求める

require 'date'
# 現在
Date.today.to_s #=> 2006-10-10
# 6ヶ月前
(Date.today << 6).to_s #=> 2006-4-10
# 6ヶ月後
(Date.today >> 6).to_s #=> 2007-4-10
# 15日前
(Date.today - 15).to_s #=> 2006-9-25
# 15日後
(Date.today + 15).to_s #=> 2006-10-25

翌日を求める

require 'date'

Date.today.to_s #=> 2006-10-10
Date.today.next.to_s #=> 2006-10-11