< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事
N :次の記事
|<:スレッドの先頭
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
Beyondです。
> に祝日判定用メソッドを作成したのですが、これはApollo専用なので、誰かRuby
> 汎用で使えるのもを作ってくれませんか?
以下のURLにあるカレンダーから、休日判定部分を抽出したものを持ってます。
http://homepage1.nifty.com/~tetsu/ruby/cmd/cal.html
ちょっと大きいのですが、参考にどうぞ。
------------------------------- holiday.rb
class TCalendarHoliday
# このデータ形式は次のようになっています。
# 月名 日付 有効年 祝日名称
# HM2 Happy Monday(2nd monday)
# HM3 Happy Monday(3rd monday)
DATA = %w[
Jan 1 0 元旦
Jan 15 -1999 成人の日
Jan HM2 2000- 成人の日
Feb 11 0 建国記念の日
Mar SHUNBUN 0 春分の日
Apr 29 0 緑の日
May 3 0 憲法記念日
May 4 1986- 国民の休日
May 5 0 こどもの日
Jul 20 1996-2002 海の日
Jul HM3 2003- 海の日
Sep 15 -2002 敬老の日
Sep HM3 2003- 敬老の日
Sep SHUBUN 0 秋分の日
Oct 10 -1999 体育の日
Oct HM2 2000- 体育の日
Nov 3 0 文化の日
Nov 23 0 勤労感謝の日
Dec 23 1989- 天皇誕生日
]
def initialize( year = 0, month = 0 )
@holiday = {}
month_name = Time.local( year, month, 1 ).strftime( '%b' )
data = DATA
while !data.empty?
m, d, y, c, *data = data
if y != '0'
if y[0,1] == '-'
next if year > y[1,4].to_i
elsif y[-1,1] == '-'
next if year < y[0,4].to_i
elsif y[4,1] == '-'
next if year < y[0,4].to_i || year > y[5,4].to_i
end
end
if month_name == m
case d
when 'SHUNBUN'
d = syunbun( year )
when 'SHUBUN'
d = syubun( year )
when 'HM2'
d = nMonday( year, month, 2 )
when 'HM3'
d = nMonday( year, month, 3 )
end
@holiday[ d.to_i ] = true
end
end
@substitute = {}
( 1..5 ).each { | n |
d = nMonday( year, month, n )
if @holiday[ d - 1 ]
@substitute[ d ] = true
end
}
end
def holiday?( day )
@holiday[ day ] || false
end
def substitute?( day )
@substitute[ day ] || false
end
def nMonday( year, month, n )
wday = Time.local( year, month, 1 ).wday
case wday
when 0..1
7 * n - wday - 5
when 2..6
7 * n - wday + 2
else
nil
end
end
#| From: hajima / crimson.gen.u-tokyo.ac.jp (Ryoichi Hajima)
#| Newsgroups: fj.questions.misc
#| Subject: Re: vernal/autumnal equinox
#| Message-ID: <HAJIMA.94Jul13161542 / tanelorn.gen.u-tokyo.ac.jp>
#| Date: 13 Jul 94 07:15:42 GMT
#|
#| 春分日 (31y+2213)/128-y/4+y/100 (1851年-1999年通用)
#| (31y+2089)/128-y/4+y/100 (2000年-2150年通用)
#|
#| 秋分日 (31y+2525)/128-y/4+y/100 (1851年-1999年通用)
#| (31y+2395)/128-y/4+y/100 (2000年-2150年通用)
def syunbun(year)
if year > 2150
STDERR.print "over year's: #{year}\n" #'
exit 1
end
v = if year < 2000 then 2213 else 2089 end
(31 * year + v)/128 - year/4 + year/100
end
def syubun(year)
if year > 2150
STDERR.print "over year's: #{year}\n" #'
exit 1
end
v = if year < 2000 then 2525 else 2395 end
(31 * year + v)/128 - year/4 + year/100
end
end
if $0 == __FILE__
c = TCalendarHoliday.new( 2003, 11 )
(1..30).each { | day |
puts "#{day} : #{c.holiday?( day )}, #{c.substitute?( day )}"
}
end
---------------------
Beyond