和暦をparse

和暦を扱うクラスはないのかなと以前書いたけど、調べたらあったっすよ。っていうか標準添付のtimeライブラリを使えばいいのね。以下テストケース

  require 'time'
  
  def test_parse
    check_time(2006, 6, 24, 17, 36, 36, Time.parse("2006/6/24 17:36:36"))
    check_time(2006, 6, 24, 17, 36, 36, Time.parse("H18.6.24 17:36:36"))
    # スラッシュだと無理
    # check_time(2006, 6, 24, 17, 36, 36, Time.parse("H18/6/24 17:36:36"))
    check_time(2006, 6, 24, 17, 36, 36, Time.parse("H18/6/24 17:36:36".tr('/', '.').upcase ))
    check_time(2006, 6, 24, 17, 36, 0, Time.parse("H18/6/24 17:36".tr('/', '.').upcase ))
    # 時間だけじゃ無理
    # check_time(2006, 6, 24, 17, 0, 0, Time.parse("H18/6/24 17".tr('/', '.').upcase ))
    check_time(2006, 6, 24, 0, 0, 0, Time.parse("H18/6/24".tr('/', '.').upcase ))
    # 日がないと無理
    # check_time(2006, 6, 1, 0, 0, 0, Time.parse("H18/6".tr('/', '.').upcase ))
    # 
    # 間違った日付(6/31)
    check_time(2006, 7, 1, 0, 0, 0, Time.parse("H18/6/31".tr('/', '.').upcase ))
    # 間違った日付(6/32)
    # check_time(2006, 7, 2, 0, 0, 0, Time.parse("H18/6/32".tr('/', '.').upcase ))
    # 無茶な月
    # check_time(2007, 1, 26, 0, 0, 0, Time.parse("H18/13/26".tr('/', '.').upcase ))
    # 間違った?年
    check_time(1990, 7, 1, 0, 0, 0, Time.parse("S65/6/31".tr('/', '.').upcase ))
    check_time(2000, 7, 1, 0, 0, 0, Time.parse("S75/6/31".tr('/', '.').upcase ))
  end
  
  private
  
  def check_time( y, m, d, h, min, s , t )
    assert_equal y, t.year
    assert_equal m, t.month
    assert_equal d, t.day
    assert_equal h, t.hour
    assert_equal min, t.min
    assert_equal s, t.sec
  end

6/31は7/1にしてくれるけど、6/32は7/2にしてくれませんでした。