zakuro 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/VERSION +1 -0
- data/lib/zakuro/calculation/base/gengou.rb +82 -0
- data/lib/zakuro/calculation/base/linear_gengou.rb +76 -0
- data/lib/zakuro/calculation/base/operated_year.rb +5 -15
- data/lib/zakuro/calculation/base/year.rb +26 -14
- data/lib/zakuro/calculation/gengou/internal/counter.rb +129 -0
- data/lib/zakuro/calculation/gengou/internal/reserve/interval.rb +183 -0
- data/lib/zakuro/calculation/gengou/internal/reserve/list.rb +382 -0
- data/lib/zakuro/calculation/gengou/internal/reserve.rb +42 -0
- data/lib/zakuro/calculation/gengou/scroll.rb +262 -0
- data/lib/zakuro/calculation/monthly/first_day.rb +3 -2
- data/lib/zakuro/calculation/monthly/month.rb +49 -2
- data/lib/zakuro/calculation/monthly/operated_month.rb +2 -2
- data/lib/zakuro/calculation/range/full_range.rb +65 -103
- data/lib/zakuro/calculation/range/operated_range.rb +13 -8
- data/lib/zakuro/calculation/range/operated_solar_terms.rb +36 -17
- data/lib/zakuro/calculation/range/transfer/gengou_scroller.rb +54 -0
- data/lib/zakuro/calculation/range/transfer/year_boundary.rb +25 -21
- data/lib/zakuro/calculation/specifier/single_day.rb +13 -35
- data/lib/zakuro/calculation/summary/single.rb +5 -2
- data/lib/zakuro/calculation/version/internal/crawler.rb +51 -0
- data/lib/zakuro/calculation/version/internal/range.rb +39 -0
- data/lib/zakuro/calculation/version/version.rb +24 -0
- data/lib/zakuro/era/japan/calendar.rb +133 -0
- data/lib/zakuro/era/japan/gengou/parser.rb +95 -25
- data/lib/zakuro/era/japan/gengou/type.rb +148 -41
- data/lib/zakuro/era/japan/gengou/validator.rb +157 -52
- data/lib/zakuro/era/japan/gengou/yaml/set-001-until-south.yaml +1870 -0
- data/lib/zakuro/era/japan/gengou/yaml/set-002-from-north.yaml +810 -0
- data/lib/zakuro/era/japan/gengou/yaml/set-003-modern.yaml +50 -0
- data/lib/zakuro/era/japan/gengou.rb +5 -5
- data/lib/zakuro/era/japan/version.rb +151 -0
- data/lib/zakuro/era/{western.rb → western/calendar.rb} +0 -0
- data/lib/zakuro/merchant.rb +12 -3
- data/lib/zakuro/operation/month/parser.rb +1 -1
- data/lib/zakuro/operation/month/type.rb +1 -1
- data/lib/zakuro/operation/month/validator.rb +1 -1
- data/lib/zakuro/output/response.rb +5 -5
- data/lib/zakuro/tools/typeconv.rb +38 -0
- data/lib/zakuro/tools/typeof.rb +4 -1
- data/lib/zakuro/version/context.rb +24 -3
- data/lib/zakuro/version/daien/daien.rb +1 -26
- data/lib/zakuro/version/genka/genka.rb +1 -26
- data/lib/zakuro/version/gihou/gihou.rb +1 -30
- data/lib/zakuro/version/gregorio/gregorio.rb +1 -9
- data/lib/zakuro/version/houryaku/houryaku.rb +1 -9
- data/lib/zakuro/version/joukyou/joukyou.rb +1 -9
- data/lib/zakuro/version/kansei/kansei.rb +1 -9
- data/lib/zakuro/version/senmyou/senmyou.rb +1 -30
- data/lib/zakuro/version/tenpou/tenpou.rb +1 -9
- data/zakuro.gemspec +1 -3
- metadata +25 -17
- data/lib/zakuro/calculation/base/multi_gengou.rb +0 -101
- data/lib/zakuro/calculation/base/multi_gengou_roller.rb +0 -218
- data/lib/zakuro/calculation/range/transfer/western_date_allocation.rb +0 -82
- data/lib/zakuro/era/japan/reki.rb +0 -91
- data/lib/zakuro/era/japan/yaml/set-001-until-south.yaml +0 -1121
- data/lib/zakuro/era/japan/yaml/set-002-from-north.yaml +0 -485
- data/lib/zakuro/era/japan/yaml/set-003-modern.yaml +0 -28
- data/lib/zakuro/version/abstract_version.rb +0 -29
- data/lib/zakuro/version.rb +0 -7
- data/lib/zakuro/version_factory.rb +0 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 567799c25255c97ec707d421b465358c1209afeef0d8c2f1c84a9b3bd5e65148
|
4
|
+
data.tar.gz: bff172488e9ea94a8da83d09fa1dc9bd62a28de871ad0cc41217d20ff5dc2b94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: daf11f9f9319d23fbba463571cb8f76184aeb7b6133fcde661bd06773113f37bc9684e8680a848c4998a96ea287f371ca123f878a7bb5dbdfb2ed499c434f8a7
|
7
|
+
data.tar.gz: 3624066b34b4271961793f58bbad9509b046a3df967df4513de195352237386ccd5848b9b5f72c8838f6efb944fac1129b494001c570aa2cb5a93440d089e173
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.6.0
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../era/western/calendar'
|
4
|
+
|
5
|
+
# :nodoc:
|
6
|
+
module Zakuro
|
7
|
+
# :nodoc:
|
8
|
+
module Calculation
|
9
|
+
# :nodoc:
|
10
|
+
module Base
|
11
|
+
#
|
12
|
+
# Gengou 元号
|
13
|
+
#
|
14
|
+
class Gengou
|
15
|
+
# @return [Western::Calendar] 開始日
|
16
|
+
attr_reader :start_date
|
17
|
+
# @return [Western::Calendar] 終了日
|
18
|
+
attr_reader :end_date
|
19
|
+
# @return [Array<LinearGengou>] 1行目元号
|
20
|
+
attr_reader :first_line
|
21
|
+
# @return [Array<LinearGengou>] 2行目元号
|
22
|
+
attr_reader :second_line
|
23
|
+
|
24
|
+
#
|
25
|
+
# 初期化
|
26
|
+
#
|
27
|
+
# @param [Western::Calendar] start_date 開始日
|
28
|
+
# @param [Western::Calendar] end_date 終了日
|
29
|
+
# @param [Array<LinearGengou>] first_line 1行目元号
|
30
|
+
# @param [Array<LinearGengou>] second_line 2行目元号
|
31
|
+
#
|
32
|
+
def initialize(start_date: Western::Calendar.new, end_date: Western::Calendar.new,
|
33
|
+
first_line: [], second_line: [])
|
34
|
+
@start_date = start_date
|
35
|
+
@end_date = end_date
|
36
|
+
@first_line = first_line
|
37
|
+
@second_line = second_line
|
38
|
+
end
|
39
|
+
|
40
|
+
#
|
41
|
+
# 1行目元号を取得する
|
42
|
+
#
|
43
|
+
# @param [Western::Calendar] date 西暦日
|
44
|
+
#
|
45
|
+
# @return [LinearGengou] 1行目元号
|
46
|
+
#
|
47
|
+
def match_first_line(date: Western::Calendar)
|
48
|
+
@first_line.each do |line|
|
49
|
+
return line.clone if line.include?(date: date)
|
50
|
+
end
|
51
|
+
|
52
|
+
LinearGengou.new
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
# 2行目元号を取得する
|
57
|
+
#
|
58
|
+
# @param [Western::Calendar] date 西暦日
|
59
|
+
#
|
60
|
+
# @return [LinearGengou] 2行目元号
|
61
|
+
#
|
62
|
+
def match_second_line(date: Western::Calendar)
|
63
|
+
@second_line.each do |line|
|
64
|
+
return line.clone if line.include?(date: date)
|
65
|
+
end
|
66
|
+
|
67
|
+
LinearGengou.new
|
68
|
+
end
|
69
|
+
|
70
|
+
#
|
71
|
+
# 不正か
|
72
|
+
#
|
73
|
+
# @return [True] 不正
|
74
|
+
# @return [False] 不正なし
|
75
|
+
#
|
76
|
+
def invalid?
|
77
|
+
@first_line.size.zero? && @second_line.size.zero?
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../era/western/calendar'
|
4
|
+
|
5
|
+
# :nodoc:
|
6
|
+
module Zakuro
|
7
|
+
# :nodoc:
|
8
|
+
module Calculation
|
9
|
+
# :nodoc:
|
10
|
+
module Base
|
11
|
+
#
|
12
|
+
# LinearGengou 直列元号
|
13
|
+
#
|
14
|
+
class LinearGengou
|
15
|
+
INVALID_YEAR = -1
|
16
|
+
|
17
|
+
# @return [Western::Calendar] 開始日
|
18
|
+
attr_reader :start_date
|
19
|
+
# @return [Western::Calendar] 終了日
|
20
|
+
attr_reader :end_date
|
21
|
+
# @return [String] 元号名
|
22
|
+
attr_reader :name
|
23
|
+
# @return [Integer] 年
|
24
|
+
attr_reader :year
|
25
|
+
|
26
|
+
#
|
27
|
+
# 初期化
|
28
|
+
#
|
29
|
+
# @param [Western::Calendar] start_date 開始日
|
30
|
+
# @param [Western::Calendar] end_date 終了日
|
31
|
+
# @param [String] name 元号名
|
32
|
+
# @param [Integer] 元号年
|
33
|
+
#
|
34
|
+
def initialize(start_date: Western::Calendar.new, end_date: Western::Calendar.new,
|
35
|
+
name: '', year: INVALID_YEAR)
|
36
|
+
@start_date = start_date
|
37
|
+
@end_date = end_date
|
38
|
+
@name = name
|
39
|
+
@year = year
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# 不正か
|
44
|
+
#
|
45
|
+
# @return [True] 不正
|
46
|
+
# @return [False] 不正なし
|
47
|
+
#
|
48
|
+
def invalid?
|
49
|
+
@name == '' || @year == INVALID_YEAR
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# 範囲内か
|
54
|
+
#
|
55
|
+
# @param [Western::Calendar] date 西暦日
|
56
|
+
#
|
57
|
+
# @return [True] 範囲内
|
58
|
+
# @return [False] 範囲外
|
59
|
+
#
|
60
|
+
def include?(date: Western::Calendar.new)
|
61
|
+
return false if invalid?
|
62
|
+
|
63
|
+
return false if @start_date.invalid?
|
64
|
+
|
65
|
+
return false if @end_date.invalid?
|
66
|
+
|
67
|
+
return false if date < @start_date
|
68
|
+
|
69
|
+
return false if date > @end_date
|
70
|
+
|
71
|
+
true
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative './year'
|
4
|
-
|
4
|
+
|
5
|
+
require_relative '../../version/context'
|
5
6
|
|
6
7
|
# :nodoc:
|
7
8
|
module Zakuro
|
@@ -16,23 +17,12 @@ module Zakuro
|
|
16
17
|
#
|
17
18
|
# 初期化
|
18
19
|
#
|
19
|
-
# @param [
|
20
|
+
# @param [Context] context 暦コンテキスト
|
20
21
|
# @param [Array<OperatedMonth>] months 年内の全ての月
|
21
22
|
# @param [Integer] total_days 年の日数
|
22
|
-
# @param [Western::Calendar] new_year_date 元旦
|
23
23
|
#
|
24
|
-
def initialize(
|
25
|
-
|
26
|
-
super(multi_gengou: multi_gengou, new_year_date: new_year_date,
|
27
|
-
months: months, total_days: total_days)
|
28
|
-
end
|
29
|
-
|
30
|
-
def commit
|
31
|
-
super
|
32
|
-
|
33
|
-
return if months.empty?
|
34
|
-
|
35
|
-
@new_year_date = months[0].first_day.western_date
|
24
|
+
def initialize(context: Context.new, months: [], total_days: 0)
|
25
|
+
super(context: context, months: months, total_days: total_days)
|
36
26
|
end
|
37
27
|
|
38
28
|
#
|
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
require_relative '../cycle/zodiac'
|
4
4
|
|
5
|
+
require_relative '../../era/western/calendar'
|
6
|
+
|
7
|
+
require_relative '../../version/context'
|
8
|
+
|
5
9
|
# :nodoc:
|
6
10
|
module Zakuro
|
7
11
|
# :nodoc:
|
@@ -12,28 +16,23 @@ module Zakuro
|
|
12
16
|
# Year 年
|
13
17
|
#
|
14
18
|
class Year
|
15
|
-
# @return [
|
16
|
-
attr_reader :
|
19
|
+
# @return [Context] 暦コンテキスト
|
20
|
+
attr_reader :context
|
17
21
|
# @return [Array<Month>] 年内の全ての月
|
18
22
|
attr_reader :months
|
19
23
|
# @return [Integer] 年の日数
|
20
24
|
attr_reader :total_days
|
21
|
-
# @return [Western::Calendar] 元旦
|
22
|
-
attr_reader :new_year_date
|
23
25
|
|
24
26
|
#
|
25
27
|
# 初期化
|
26
28
|
#
|
27
|
-
# @param [
|
29
|
+
# @param [Context] context 暦コンテキスト
|
28
30
|
# @param [Array<Month>] months 年内の全ての月
|
29
31
|
# @param [Integer] total_days 年の日数
|
30
|
-
# @param [Western::Calendar] new_year_date 元旦
|
31
32
|
#
|
32
|
-
def initialize(
|
33
|
-
|
34
|
-
@multi_gengou = multi_gengou
|
33
|
+
def initialize(context: Context.new, months: [], total_days: 0)
|
34
|
+
@context = context
|
35
35
|
@months = months
|
36
|
-
@new_year_date = new_year_date
|
37
36
|
@total_days = total_days
|
38
37
|
end
|
39
38
|
|
@@ -58,21 +57,34 @@ module Zakuro
|
|
58
57
|
# @return [MultiGengou] 自身
|
59
58
|
#
|
60
59
|
def next_year
|
61
|
-
@multi_gengou.next_year
|
62
|
-
|
63
|
-
@new_year_date += @total_days
|
64
60
|
@total_days = 0
|
65
61
|
|
66
62
|
self
|
67
63
|
end
|
68
64
|
|
65
|
+
#
|
66
|
+
# 年初を取得する
|
67
|
+
#
|
68
|
+
# @return [Western::Calendar] 年初
|
69
|
+
#
|
70
|
+
def new_year_date
|
71
|
+
return Western::Calendar.new unless months
|
72
|
+
|
73
|
+
return Western::Calendar.new if months.size.zero?
|
74
|
+
|
75
|
+
@months[0].western_date
|
76
|
+
end
|
77
|
+
|
69
78
|
#
|
70
79
|
# 十干十二支を取得する
|
71
80
|
#
|
72
81
|
# @return [String] 十干十二支
|
73
82
|
#
|
74
83
|
def zodiac_name
|
75
|
-
|
84
|
+
date = new_year_date
|
85
|
+
return '' if date.invalid?
|
86
|
+
|
87
|
+
Cycle::Zodiac.year_name(western_year: date.year)
|
76
88
|
end
|
77
89
|
|
78
90
|
#
|
@@ -0,0 +1,129 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../era/japan/gengou'
|
4
|
+
require_relative '../../../era/japan/calendar'
|
5
|
+
require_relative '../../../era/western/calendar'
|
6
|
+
|
7
|
+
# :nodoc:
|
8
|
+
module Zakuro
|
9
|
+
# :nodoc:
|
10
|
+
module Calculation
|
11
|
+
# :nodoc:
|
12
|
+
module Gengou
|
13
|
+
#
|
14
|
+
# Counter 加算元号
|
15
|
+
#
|
16
|
+
class Counter
|
17
|
+
# @return [Integer] 不正値
|
18
|
+
INVALID_YEAR = -1
|
19
|
+
|
20
|
+
# @return [Japan::Gengou] 元号
|
21
|
+
attr_reader :gengou
|
22
|
+
# @return [Integer] 元号年
|
23
|
+
attr_reader :japan_year
|
24
|
+
# @return [Integer] 西暦年
|
25
|
+
attr_reader :western_year
|
26
|
+
|
27
|
+
#
|
28
|
+
# 初期化
|
29
|
+
#
|
30
|
+
# @param [Japan::Gengou] gengou 元号
|
31
|
+
#
|
32
|
+
def initialize(gengou: Japan::Gengou.new)
|
33
|
+
@gengou = gengou
|
34
|
+
@japan_year = gengou.both_start_year.japan
|
35
|
+
@western_year = gengou.both_start_year.western
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
# 和暦開始日を取得する
|
40
|
+
#
|
41
|
+
# @return [Japan::Calendar] 和暦開始日
|
42
|
+
#
|
43
|
+
def japan_start_date
|
44
|
+
return Japan::Calendar.new if @gengou.invalid?
|
45
|
+
|
46
|
+
@gengou.both_start_date.japan
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
# 西暦開始日を取得する
|
51
|
+
#
|
52
|
+
# @return [Western::Calendar] 西暦開始日
|
53
|
+
#
|
54
|
+
def western_start_date
|
55
|
+
return Western::Calendar.new if @gengou.invalid?
|
56
|
+
|
57
|
+
@gengou.both_start_date.western
|
58
|
+
end
|
59
|
+
|
60
|
+
#
|
61
|
+
# 西暦終了日を取得する
|
62
|
+
#
|
63
|
+
# @return [Western::Calendar] 西暦終了日
|
64
|
+
#
|
65
|
+
def western_end_date
|
66
|
+
return Western::Calendar.new if @gengou.invalid?
|
67
|
+
|
68
|
+
@gengou.end_date
|
69
|
+
end
|
70
|
+
|
71
|
+
#
|
72
|
+
# 次年にする
|
73
|
+
#
|
74
|
+
# @return [MultiGengou] 自身
|
75
|
+
#
|
76
|
+
def next_year
|
77
|
+
@japan_year += 1
|
78
|
+
@western_year += 1
|
79
|
+
|
80
|
+
self
|
81
|
+
end
|
82
|
+
|
83
|
+
#
|
84
|
+
# 元号名を取得する
|
85
|
+
#
|
86
|
+
# @return [String] 元号名
|
87
|
+
#
|
88
|
+
def name
|
89
|
+
return '' unless @gengou
|
90
|
+
|
91
|
+
@gengou.name
|
92
|
+
end
|
93
|
+
|
94
|
+
#
|
95
|
+
# 不正か
|
96
|
+
#
|
97
|
+
# @return [True] 不正
|
98
|
+
# @return [False] 不正なし
|
99
|
+
#
|
100
|
+
def invalid?
|
101
|
+
@gengou.invalid? || @japan_year == INVALID_YEAR || @western_year == INVALID_YEAR
|
102
|
+
end
|
103
|
+
|
104
|
+
#
|
105
|
+
# 指定した日が元号に含まれるか
|
106
|
+
#
|
107
|
+
# @param [Western::Calendar] date 日
|
108
|
+
#
|
109
|
+
# @return [True] 含まれる
|
110
|
+
# @return [False] 含まれない
|
111
|
+
#
|
112
|
+
def include?
|
113
|
+
@gengou.include?
|
114
|
+
end
|
115
|
+
|
116
|
+
#
|
117
|
+
# ディープコピー
|
118
|
+
#
|
119
|
+
# @param [MultiGengou] obj 自身
|
120
|
+
#
|
121
|
+
def initialize_copy(obj)
|
122
|
+
@gengou = obj.gengou.clone
|
123
|
+
@japan_year = obj.japan_year
|
124
|
+
@western_year = obj.western_year
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,183 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../../era/western/calendar'
|
4
|
+
|
5
|
+
require_relative './list'
|
6
|
+
|
7
|
+
# :nodoc:
|
8
|
+
module Zakuro
|
9
|
+
# :nodoc:
|
10
|
+
module Calculation
|
11
|
+
# :nodoc:
|
12
|
+
module Gengou
|
13
|
+
# :nodoc:
|
14
|
+
module Reserve
|
15
|
+
# Interval
|
16
|
+
#
|
17
|
+
# 予約済み計算範囲
|
18
|
+
#
|
19
|
+
class Interval
|
20
|
+
# @return [List] 1行目元号
|
21
|
+
attr_reader :first_gengou
|
22
|
+
# @return [List] 2行目元号
|
23
|
+
attr_reader :second_gengou
|
24
|
+
|
25
|
+
#
|
26
|
+
# 初期化
|
27
|
+
#
|
28
|
+
# @param [Western::Calendar] start_date 西暦開始日
|
29
|
+
# @param [Western::Calendar] end_date 西暦終了日
|
30
|
+
#
|
31
|
+
def initialize(start_date: Western::Calendar.new, end_date: Western::Calendar.new)
|
32
|
+
@first_gengou = List.new(first: true, start_date: start_date, end_date: end_date)
|
33
|
+
@second_gengou = List.new(first: false, start_date: start_date, end_date: end_date)
|
34
|
+
end
|
35
|
+
|
36
|
+
#
|
37
|
+
# 不正か
|
38
|
+
#
|
39
|
+
# @return [True] 不正
|
40
|
+
# @return [False] 不正なし
|
41
|
+
#
|
42
|
+
def invalid?
|
43
|
+
@first_gengou.invalid?
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# 1行目元号を取得する
|
48
|
+
#
|
49
|
+
# @param [Western::Calendar] western_date 西暦日
|
50
|
+
#
|
51
|
+
# @return [Gengou::Counter] 加算元号
|
52
|
+
#
|
53
|
+
def match_first_gengou(western_date: Western::Calendar.new)
|
54
|
+
@first_gengou.get(western_date: western_date)
|
55
|
+
end
|
56
|
+
|
57
|
+
#
|
58
|
+
# 2行目元号を取得する
|
59
|
+
#
|
60
|
+
# @param [Western::Calendar] western_date 西暦日
|
61
|
+
#
|
62
|
+
# @return [Gengou::Counter] 加算元号
|
63
|
+
#
|
64
|
+
def match_second_gengou(western_date: Western::Calendar.new)
|
65
|
+
@second_gengou.get(western_date: western_date)
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
# 範囲内元号(1行目元号)を取得する
|
70
|
+
#
|
71
|
+
# @param [Western::Calendar] start_date 西暦開始日
|
72
|
+
# @param [Western::Calendar] end_date 西暦終了日
|
73
|
+
#
|
74
|
+
# @return [Array<Gengou::Counter>] 範囲内元号(1行目元号)
|
75
|
+
#
|
76
|
+
def collect_first_gengou(start_date: Western::Calendar.new,
|
77
|
+
end_date: Western::Calendar.new)
|
78
|
+
@first_gengou.collect(start_date: start_date, end_date: end_date)
|
79
|
+
end
|
80
|
+
|
81
|
+
#
|
82
|
+
# 範囲内元号(2行目元号)を取得する
|
83
|
+
#
|
84
|
+
# @param [Western::Calendar] start_date 西暦開始日
|
85
|
+
# @param [Western::Calendar] end_date 西暦終了日
|
86
|
+
#
|
87
|
+
# @return [Array<Gengou::Counter>] 範囲内元号(2行目元号)
|
88
|
+
#
|
89
|
+
def collect_second_gengou(start_date: Western::Calendar.new,
|
90
|
+
end_date: Western::Calendar.new)
|
91
|
+
@second_gengou.collect(start_date: start_date, end_date: end_date)
|
92
|
+
end
|
93
|
+
|
94
|
+
#
|
95
|
+
# 最古の元号から和暦開始日を取得する
|
96
|
+
#
|
97
|
+
# @return [Japan::Calendar] 和暦開始日
|
98
|
+
#
|
99
|
+
def japan_start_date
|
100
|
+
gengou = oldest_gengou
|
101
|
+
|
102
|
+
return Japan::Calendar.new if gengou.invalid?
|
103
|
+
|
104
|
+
gengou.japan_start_date
|
105
|
+
end
|
106
|
+
|
107
|
+
#
|
108
|
+
# 最古の元号から西暦開始日を取得する
|
109
|
+
#
|
110
|
+
# @return [Western::Calendar] 西暦開始日
|
111
|
+
#
|
112
|
+
def western_start_date
|
113
|
+
gengou = oldest_gengou
|
114
|
+
|
115
|
+
return Western::Calendar.new if gengou.invalid?
|
116
|
+
|
117
|
+
gengou.western_start_date
|
118
|
+
end
|
119
|
+
|
120
|
+
#
|
121
|
+
# 開始西暦年を取得する
|
122
|
+
#
|
123
|
+
# @return [Integer] 開始西暦年
|
124
|
+
#
|
125
|
+
def western_start_year
|
126
|
+
first_start_year = @first_gengou.western_start_year
|
127
|
+
second_start_year = @second_gengou.western_start_year
|
128
|
+
|
129
|
+
return first_start_year if @first_gengou.invalid?
|
130
|
+
|
131
|
+
return first_start_year if @second_gengou.invalid?
|
132
|
+
|
133
|
+
return first_start_year if first_start_year < second_start_year
|
134
|
+
|
135
|
+
second_start_year
|
136
|
+
end
|
137
|
+
|
138
|
+
#
|
139
|
+
# 終了西暦年を取得する
|
140
|
+
#
|
141
|
+
# @return [Integer] 終了西暦年
|
142
|
+
#
|
143
|
+
def western_end_year
|
144
|
+
first_end_year = @first_gengou.western_end_year
|
145
|
+
second_end_year = @second_gengou.western_end_year
|
146
|
+
|
147
|
+
return first_end_year if @first_gengou.invalid?
|
148
|
+
|
149
|
+
return first_end_year if @second_gengou.invalid?
|
150
|
+
|
151
|
+
return first_end_year if first_end_year > second_end_year
|
152
|
+
|
153
|
+
second_end_year
|
154
|
+
end
|
155
|
+
|
156
|
+
private
|
157
|
+
|
158
|
+
#
|
159
|
+
# 最古の元号を取得する
|
160
|
+
#
|
161
|
+
# @return [Japan::Gengou] 最古の元号
|
162
|
+
#
|
163
|
+
def oldest_gengou
|
164
|
+
return @first_gengou if @first_gengou.invalid?
|
165
|
+
|
166
|
+
return @first_gengou if @second_gengou.invalid?
|
167
|
+
|
168
|
+
first_western_date = @first_gengou.western_start_date
|
169
|
+
second_western_date = @second_gengou.western_start_date
|
170
|
+
|
171
|
+
return @first_gengou if first_western_date.invalid?
|
172
|
+
|
173
|
+
return @first_gengou if second_western_date.invalid?
|
174
|
+
|
175
|
+
return @first_gengou if first_western_date < second_western_date
|
176
|
+
|
177
|
+
@second_gengou
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|