Ruby: Date, DateTime クラス
日付オブジェクトの文字列化 (strftime)
day を 日付オブジェクトとすると
day.strftime( "フォーマット指示子" ) #例 day = Date.new( 2016, 7, 1 ) p day.strftime( "%b" ) #=> "Jul"
フォーマット指示子
- 時刻
- %S: 秒 (seconds)
- %M: 分 (minutes)
- %H: 時 (hours)
- 日
- %d: 日
- 月
- %B: 月の英語名 (January, February, ...)
- %b: 月の英語名・短縮形 (Jun, Jul, ...)
- %m: 月の数字 (1, 2, 3, ...)
- 年
- %Y: 4 桁の年
「前日」・「1 ヶ月前」・「2 ケ月後」など (DateTime クラス)
Date クラスでも使えたような気がする。Date はあまり使わないので未確認。
timeo = DateTime.new( 2015, 3, 31, 12, 0, 0 ) => #<DateTime: 2457113,0,2299161> # 前日 ( timeo - 1 ).strftime => "2015-03-30T12:00:00+00:00" # 5 日後 ( timeo + 5 ).strftime => "2015-04-05T12:00:00+00:00" # 1 ヶ月前 (該当日がない時は月末日を返すらしい…) ( timeo << 1 ).strftime => "2015-02-28T12:00:00+00:00" # 2 ヶ月後 (timeo >> 2 ).strftime => "2015-05-31T12:00:00+00:00"
"<<" とか ">>" は便利だけど忘れやすいですね。"± n" はすぐに思い出すのですが
書式を指定して文字列日付を Date, DateTime オブジェクトに変換 (strptime)
date = "2016083119" # 2016 年 8 月 31 日 19 時 timeo = DateTime.strptime( date, "%Y%m%d%H" ) => #<DateTime: 2016-08-31T19:00:00+00:00 ((2457632j,68400s,0n) #以下略
応用: DateTime オブジェクトが属する月の日数
date = "2016083119" # 2016 年 8 月 31 日 19 時 timeo = DateTime.strptime( date, "%Y%m%d%H" ) mthstart = DateTime.new( timeo.year, timeo.month, 1 ) dom = ( ( mthstart >> 1 ) - 1 ).day # ひと月進めて ( >> 1 )、一日戻す ( - 1 ) => 31