和暦西暦変換

最近書類等に書く和暦を調べるのが面倒になってきた。
(和暦なんか覚えていない)
ちょっと調べたけれどRubyで変換するのが無い。
無ければ作るのがプログラマということで早速作った。


とりあえず昭和と平成だけ。
多分、大正からは無くても問題ないからいれていない。
あまりまじめに作っていないから、今後機能拡張するんだったら作りなおしかな。

#!/usr/bin/env ruby

#
#和暦西暦変換
#

require 'date'
require 'jcode'

$KCODE='utf'

class Koyomi < Date
  #昭和と平成のみ
  private
  def table
    [["昭和", 1926, 12, 25, 64], ["平成", 1989, 1, 8, nil]]
  end

  #和暦
  public
  def to_japan
    d = Date.new(year, month, day)

    table.size.times do |i|
      start_day = Date.new(table[i][1], table[i][2], table[i][3])
      if table[i+1]
        end_day = Date.new(table[i+1][1], table[i+1][2], table[i+1][3])
        return "#{table[i][0]}#{d.year-table[i][1]+1}#{d.month}#{d.day}" if start_day <= d and d < end_day
      else
        end_day = DateTime.now
        return "#{table[i][0]}#{d.year-table[i][1]+1}#{d.month}#{d.day}" if start_day <= d and d <= end_day
      end
    end
    return false
  end
end

year = ARGV.shift
exit 1 unless year

month = ARGV.shift
unless month
  puts Koyomi.new(year.to_i).to_japan
  exit 0
end

date= ARGV.shift
unless date
  puts Koyomi.new(year.to_i, month.to_i).to_japan
  exit 0
end

puts Koyomi.new(year.to_i, month.to_i, date.to_i).to_japan


初めて知ったけど、昭和の初日はクリスマス。


参考サイト
http://www.kumamotokokufu-h.ed.jp/kumamoto/bungaku/wa_seireki.html