Archive

和暦(元号)変換クラス

rubyを勉強しています。練習で作成したものです。

#!/usr/bin/ruby -w
require 'date'

class WaDate < Date
  GENGOU= {
    1868 => {:full => '明治', :short => '明', :alpha => 'M'},
    1912 => {:full => '大正', :short => '大', :alpha => 'T'},
    1926 => {:full => '昭和', :short => '昭', :alpha => 'S'},
    1989 => {:full => '平成', :short => '平', :alpha => 'H'}
  }

  def initialize(ajd=0, of=0, sg=ITALY)
    super
    @current_gengou = nil
  end

  def current_gengou
    return @current_gengou if @current_gengou && @current_gengou[:year] == year
    gengou_start_year = GENGOU.keys.sort.reverse.find do |start_year|
      year > start_year
    end
    @current_gengou = {
      :year => year,
      :gengou_year => year - gengou_start_year + 1
    }.merge(GENGOU[gengou_start_year])
  end

  def wa_year(style = nil)
    style && gengou(style) + current_gengou[:gengou_year].to_s || current_gengou[:gengou_year]
  end

  def gengou(style)
    current_gengou[style] || raise
  end

end



date = WaDate.today # 2010-05-13
puts date.wa_year :full # '平成22'
puts date.gengou :alpha # 'H'
puts date.wa_year + 1 #=> 23