日付表現と反復指定の使用例
日付表現と反復指定の使用例を列挙しておきます。
require 'pp'
require 'when_exe'
include When
#年の指定 - yyyy{ry}
pp when?('1900{甲子}-01-01') #=> 1924-01-01
pp when?('{甲子}-01-01', :abbr=>1900) #=> 1924-01-01
pp when?('昭和{甲子}-01-01') #=> 昭和59(1984).01.01
#日の指定 - dd{rd}
# rdの指定
# 剰余類
pp when?('2015-02-{SU}') #=> 2015-02-01, 2月の第1日曜
pp when?('2015-02-{4SU}') #=> 2015-02-22, 2月の第4日曜
# イベント
pp when?('2015-09-01{SolarTerms#term180}T00:00+09:00')#=> 2015-09-23T17:20+09:00, 秋分
pp when?('2015-01-01{Christian#easter}') #=> 2015-04-05, 復活祭
pp when?('2015-01-01{Christian#christmas}') #=> 2015-12-25, クリスマス
# 組み合わせ - 七曜とイベント
pp when?('2015-09-01{SolarTerms#term180-1&TU}T00:00+09:00') #=> 2015-09-22T00:00+09:00, 国民の休日
# 組み合わせ - 日付と七曜
pp when?('2015-05-{06&MO,TU,WE}') #=> 2015-05-06, 振替休日
pp when?('2016-05-{06&MO,TU,WE}') #=> nil, 2016年は憲法記念日~こどもの日は振替にならない
# ddの省略
pp when?('2015-02-01{5SU}') #=> 2015-03-01, 月に関係なく基準日から5回目の日曜日
pp when?('2015-02-{5SU}') #=> nil, 月の外なら nil になる
pp when?('2015-02-{-SU}') #=> 2015-02-22, 2月の最終日曜
#反復部 - RnPxx
# Rn部
# n 省略 - Enumerator で返す
it = when?('R/2015-09-01{SolarTerms#term180-1&TU}T00:00+09:00') #=>国民の休日, 下記
3.times do
pp it.succ #=>
# 2015-09-22T00:00+09:00
# 2026-09-22T00:00+09:00
# 2032-09-21T00:00+09:00
end
# n 回反復 - Array で返す
pp when?('R10/2015-02-{MO}') #=> 2月の月曜, 下記
# [2015-02-02, 2015-02-09,
# 2015-02-16, 2015-02-23,
# 2016-02-01, 2016-02-08,
# 2016-02-15, 2016-02-22,
# 2016-02-29, 2017-02-06]
pp when?('R3/2015-05-15/P2Y') #=> 神田祭例大祭(隔年),日曜の場合の例外考慮せず
# [2015-05-15,
# 2017-05-15,
# 2019-05-15]
pp when?('R3/2015-09-01{SolarTerms#term180-1&TU}T00:00+09:00') #=>国民の休日, 下記
# [2015-09-22T00:00+09:00,
# 2026-09-22T00:00+09:00,
# 2032-09-21T00:00+09:00]
pp when?('R2/弘化{卯}-02-{1卯}') #=>「金性のひとうけニ入る」, 下記
# [安政02(1855).02.10,
# 慶応03(1867).02.07]
pp when?('R24/2016-01-01{SolarTerms#term0/15}T00:00+09:00') #=> 二十四節気, 分未満切り捨て
#[2016-01-06T07:09+09:00,
<..中略..>
# 2016-12-21T19:44+09:00]
# Pxx部
# あり - xx は各反復ごとのイベント継続時間
pp when?('R4P3D/2011-01-01{Christian#easter-50}') #=> リオのカーニバル
#
# [2011-03-05...2011-03-08,
# 2012-02-18...2012-02-21,
# 2013-02-09...2013-02-12,
# 2014-03-01...2014-03-04]
require 'pp'
require 'when_exe'
include When
#年の指定 - yyyy{ry}
pp when?('1900{甲子}-01-01') #=> 1924-01-01
pp when?('{甲子}-01-01', :abbr=>1900) #=> 1924-01-01
pp when?('昭和{甲子}-01-01') #=> 昭和59(1984).01.01
#日の指定 - dd{rd}
# rdの指定
# 剰余類
pp when?('2015-02-{SU}') #=> 2015-02-01, 2月の第1日曜
pp when?('2015-02-{4SU}') #=> 2015-02-22, 2月の第4日曜
# イベント
pp when?('2015-09-01{SolarTerms#term180}T00:00+09:00')#=> 2015-09-23T17:20+09:00, 秋分
pp when?('2015-01-01{Christian#easter}') #=> 2015-04-05, 復活祭
pp when?('2015-01-01{Christian#christmas}') #=> 2015-12-25, クリスマス
# 組み合わせ - 七曜とイベント
pp when?('2015-09-01{SolarTerms#term180-1&TU}T00:00+09:00') #=> 2015-09-22T00:00+09:00, 国民の休日
# 組み合わせ - 日付と七曜
pp when?('2015-05-{06&MO,TU,WE}') #=> 2015-05-06, 振替休日
pp when?('2016-05-{06&MO,TU,WE}') #=> nil, 2016年は憲法記念日~こどもの日は振替にならない
# ddの省略
pp when?('2015-02-01{5SU}') #=> 2015-03-01, 月に関係なく基準日から5回目の日曜日
pp when?('2015-02-{5SU}') #=> nil, 月の外なら nil になる
pp when?('2015-02-{-SU}') #=> 2015-02-22, 2月の最終日曜
#反復部 - RnPxx
# Rn部
# n 省略 - Enumerator で返す
it = when?('R/2015-09-01{SolarTerms#term180-1&TU}T00:00+09:00') #=>国民の休日, 下記
3.times do
pp it.succ #=>
# 2015-09-22T00:00+09:00
# 2026-09-22T00:00+09:00
# 2032-09-21T00:00+09:00
end
# n 回反復 - Array で返す
pp when?('R10/2015-02-{MO}') #=> 2月の月曜, 下記
# [2015-02-02, 2015-02-09,
# 2015-02-16, 2015-02-23,
# 2016-02-01, 2016-02-08,
# 2016-02-15, 2016-02-22,
# 2016-02-29, 2017-02-06]
pp when?('R3/2015-05-15/P2Y') #=> 神田祭例大祭(隔年),日曜の場合の例外考慮せず
# [2015-05-15,
# 2017-05-15,
# 2019-05-15]
pp when?('R3/2015-09-01{SolarTerms#term180-1&TU}T00:00+09:00') #=>国民の休日, 下記
# [2015-09-22T00:00+09:00,
# 2026-09-22T00:00+09:00,
# 2032-09-21T00:00+09:00]
pp when?('R2/弘化{卯}-02-{1卯}') #=>「金性のひとうけニ入る」, 下記
# [安政02(1855).02.10,
# 慶応03(1867).02.07]
pp when?('R24/2016-01-01{SolarTerms#term0/15}T00:00+09:00') #=> 二十四節気, 分未満切り捨て
#[2016-01-06T07:09+09:00,
<..中略..>
# 2016-12-21T19:44+09:00]
# Pxx部
# あり - xx は各反復ごとのイベント継続時間
pp when?('R4P3D/2011-01-01{Christian#easter-50}') #=> リオのカーニバル
#
# [2011-03-05...2011-03-08,
# 2012-02-18...2012-02-21,
# 2013-02-09...2013-02-12,
# 2014-03-01...2014-03-04]
この記事へのコメント