yucken の業務上電脳 Tips 日記、なのだよ。-弐式-

いまさら電脳 Tips といふものを、書いてみむとして、するなり.元々は広い意味での電脳(コンピュータ)の Tips を書いていたのですが,いつのまにか,解析ツールの「電脳 ruby」と IDL の Tips がメインに (・)>

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