27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/wareki/date.rb', line 27
def self._parse(str)
str = str.to_s.gsub(/[[:space:]]/, '')
match = REGEX.match(str)
match && !match[0].empty? or
raise ArgumentError, "Invaild Date: #{str}"
era = match[:era_name]
if (era.nil? || era == '') && match[:year].nil?
year = Date.today.year
else
(year = Utils.k2i(match[:year])) > 0 or
raise ArgumentError, "Invalid year: #{str}"
end
month = day = 1
era.to_s != '' && era.to_s != '紀元前' && !ERA_BY_NAME[era] and
raise ArgumentError, "Date parse failed: Invalid era name '#{match[:era_name]}'"
if match[:month]
month = Utils.k2i(match[:month])
elsif match[:alt_month]
month = Utils.alt_month_name_to_i(match[:alt_month])
end
month > 12 || month < 1 and
raise ArgumentError, "Invalid month: #{str}"
if match[:day]
if match[:day] == '晦'
day = Utils.last_day_of_month(ERA_BY_NAME[era].year + year - 1, month, match[:is_leap])
else
day = Utils.k2i(match[:day])
end
end
_check_invalid_date(era, year, month, day) or
raise ArgumentError, "Invaild Date: #{str}"
{era: era, year: year, month: month, day: day, is_leap: !!match[:is_leap]}
end
|