07/04/25 19:09:23
#!/usr/bin/ruby
require 'date' # >>545-546 のを改悪
require 'enumerator'
class Date
def to_a
(Date.new(self.year,self.month,1)..Date.new(self.year,self.month,-1)).to_a
end
def calender(wide = true)
width = wide ? 3 : 2
cal = "#{MONTHNAMES[self.month]} #{self.year if wide}".center((width+1)*7) << "\n"
cal << ABBR_DAYNAMES.map{|n| n[0..width-1]}.join(' ') << "\n"
cal << ' ' * (width+1) * Date.new(self.year, self.month, 1).wday
self.to_a.each do |d|
cal << d.day.to_s.rjust(width) << ' ' << (d.wday == 6 ? "\n" : "")
end; cal
end
def calender_yearly
cals = (1..12).map do |month|
a = Date.new(self.year, month, 1).calender(false).split(/\n/)
a[7] ||= ''; a
end
ret = "#{self.year.to_s.center(63)}\n\n"
cals.each_slice(3) do |a|
ret << a.transpose.map{|b|b.map{|c|c.ljust(22)}.to_s}.join("\n") << "\n"
end; ret
end
end
case ARGV.size
when 0; puts Date.today.calender
when 1; puts Date.new(ARGV[0].to_i, 1, 1).calender_yearly
when 2; puts Date.new(ARGV[1].to_i, ARGV[0].to_i, 1).calender
end