Comment detail

西暦 to 和暦 (Nested Flatten)

お題のサンプル出力では元年は前年号の最終年と併記していますが, 1年を元年としたことが同義だと考えてその記述は省略しました.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
require 'date'
require 'kconv'
WAREKI = [['明治', '1868/9/8'], ['大正', '1912/7/30'], 
  ['昭和', '1926/12/25'], ['平成', '1989/1/8']]
DATES = %w('1868/12/2' '1926/12/24' '2007/12/01' '1926/12/25'
           '1868/1/2' '1868/100/2')
wareki = WAREKI.sort{|a, b| 
  -1*(Date.parse(a[1]).year <=> Date.parse(b[1]).year)
} # => 新しい年代からマッチさせるためにソート 
DATES.each{|date_str|
  begin
    date = Date.parse(date_str)
    y0, m0, d0 = date.year, date.month, date.day
    era = wareki.each{|nengo, date_str|
      date = Date.parse(date_str)
      y1, m1, d1 = date.year, date.month, date.day
      evaluation = y0 >= y1 && (m0 > m1 or m0 == m1 && d0 >= d1)
      break [nengo, y0 - y1] if evaluation
    }
    puts "#{era[0]}#{era[1] == 0 ? '元' : era[1] + 1}#{m0}#{d0}日".tosjis
  rescue
    puts '範囲外'.tosjis
    next
  end
}

Index

Feed

Other

Link

Pathtraq

loading...