rubyで時刻取得や日付計算のまとめメモ公開
# strftime options
%A: 曜日の名称(Sunday, Monday ... )
%a: 曜日の省略名(Sun, Mon ... )
%B: 月の名称(January, February ... )
%b: 月の省略名(Jan, Feb ... )
%C: 世紀 (2009年であれば 20)
%c: 日付と時刻
%D: 日付 (%m/%d/%y)
%d: 日(01-31)
%e: 日。一桁の場合、半角空白で埋める ( 1..31)
%F: %Y-%m-%d と同等 (ISO 8601の日付フォーマット)
%H: 24時間制の時(00-23)
%h: %b と同等
%I: 12時間制の時(01-12)
%j: 年中の通算日(001-366)
%k: 24時間制の時。一桁の場合、半角空白で埋める ( 0..23)
%L: ミリ秒 (000.999)
%l: 12時間制の時。一桁の場合、半角空白で埋める ( 0..12)
%M: 分(00-59)
%m: 月を表す数字(01-12)
%n: 改行 (\n)
%N: 秒の小数点以下。桁の指定がない場合は9桁 (ナノ秒)、%6N: マイクロ秒 (6桁)、%3N: ミリ秒 (3桁)
%P: 午前または午後(am,pm)
%p: 午前または午後(AM,PM)
%R: 24時間制の時刻。%H:%M と同等。
%r: 12時間制の時刻。%I:%M:%S %p と同等。
%S: 秒(00-60) (60はうるう秒)
%s: 1970-01-01 00:00:00 UTC からの経過秒
%T: 24時間制の時刻。%H:%M:%S と同等。
%t: タブ文字 (\t)
%U: 週を表す数。最初の日曜日が第1週の始まり(00-53)
%u: 月曜日を1とした、曜日の数値表現 (1..7)
%v: VMS形式の日付 (%e-%b-%Y)
%V: ISO 8601形式の暦週 (01..53)
%W: 週を表す数。最初の月曜日が第1週の始まり(00-53)
%w: 曜日を表す数。日曜日が0(0-6)
%X: 時刻
%x: 日付
%Y: 西暦を表す数
%y: 西暦の下2桁(00-99)
%Z: タイムゾーン
%z: タイムゾーン。UTCからのオフセット (例 0900)
%%: %自身
ruby
# -*- coding: utf-8 -*-
# 日付の作成 ###################################################
t = Time.local 2012,3,16,9,33,50
p t.strftime "%Y-%m-%d %H:%M:%S %Z"
#=> "2012-03-16 09:33:50 JST"
t = Time.mktime 2012,3,16,9,33,50
p t.strftime "%Y-%m-%d %H:%M:%S %Z"
#=> "2012-03-16 09:33:50 JST"
#現在の日付作成
t = Time.now
p t.strftime "%Y-%m-%d %H:%M:%S %Z"
#=> "2012-04-11 20:46:47 JST"
## Date DateTimeを利用は require が必要
require 'date'
d = Date.today
p d.year
p d.month
p d.day
dt = DateTime.now
p dt.year
p dt.month
p dt.day
p dt.hour
p dt.min
p dt.sec
p dt.wday #曜日 0日- 6土
p dt.yday #1月1日から通算日数
p dt.zone
# 文字列から日付時刻に変換 #####################################
#
## Date.parse methodを利用のため
require 'date'
## Time.parse methodを利用のため
require 'time'
# 文字列からTimeオブジェクト変換
s = "2012/04/01 09:30"
t = Time.parse s
p t #=> 2012-04-01 09:30:00 0900
p t.year #=> 2012
# その他の形式
t = Time.parse "Sun, 1 Apr 2012 09:30:01 0900"
p t #=> 2012-04-01 09:30:01 0900
p t.year #=> 2012
# 特定形式の日付型
p Time.rfc2822 "Mon, 2 Apr 2012 09:00:00 0900"
#=> 2012-04-02 09:00:00 0900
p Time.xmlschema "20012-04-02T09:00:00Z"
#=> 20012-04-02 09:00:00 UTC
p Time.httpdate "Sun, 01 Apr 2012 09:00:00 GMT"
#=> 2012-04-01 18:00:00 0900
# 日付の計算 ###################################################
#月の日数を取得
t = Time.local 2012, 4, 1
d = Date.new 2012, 4, 1
dt = DateTime.new 2012, 4, 1
#Timeの加算減算は秒単位
t_plus = t 10
p t_plus.strftime "%Y-%m-%d %H:%M:%S %Z"
#=> "2012-04-01 00:00:10 JST"
# Date の日付計算
d_plus = d 10
p d_plus.strftime "%Y-%m-%d %H:%M:%S %Z"
#=> "2012-04-11 00:00:00 00:00"
#DateTime の日付計算
dt_puls = dt - 10
p dt_puls.strftime "%Y-%m-%d %H:%M:%S %Z"
#=> "2012-03-22 00:00:00 00:00"
# date DateTime 月計算 << >>
d_plus = d << 3
p d_plus.strftime "%Y-%m-%d %H:%M:%S %Z"
#=> "2012-01-01 00:00:00 00:00"
d_plus = d >> 3
p d_plus.strftime "%Y-%m-%d %H:%M:%S %Z"
#=> "2012-07-01 00:00:00 00:00"
# 年計算は 年数 12倍 をする
d_plus = d << 1 * 12
p d_plus.strftime "%Y-%m-%d %H:%M:%S %Z"
#=> "2011-04-01 00:00:00 00:00"
# 月の日数を取得
d = Date.new 2012,2
tmp_day = d >> 1
tmp2_day = tmp_day -1
p tmp2_day.day
#=> 29
コメントする