zakuro 0.9.1 → 0.9.2
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/README.md +19 -17
- data/VERSION +1 -1
- data/doc/condition.md +3 -1
- data/doc/expection.md +11 -0
- data/doc/operation/csv/month.csv +4 -4
- data/doc/operation/operation.xlsx +0 -0
- data/lib/zakuro/calculation/era/gengou/abstract_scroll.rb +2 -2
- data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_range.rb +5 -5
- data/lib/zakuro/calculation/era/gengou/internal/reserve/named_range.rb +1 -1
- data/lib/zakuro/calculation/monthly/operated_month.rb +18 -1
- data/lib/zakuro/calculation/summary/internal/option.rb +27 -20
- data/lib/zakuro/era/japan/calendar.rb +2 -2
- data/lib/zakuro/era/japan/gengou/resource/validator.rb +2 -2
- data/lib/zakuro/era/western/calendar.rb +5 -11
- data/lib/zakuro/era/western/date_text.rb +40 -0
- data/lib/zakuro/gateway/locale/date.rb +2 -2
- data/lib/zakuro/operation/month/validator.rb +7 -1
- data/lib/zakuro/operation/yaml/month.yaml +14 -14
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: eef9c974d34a357b894544e6fdd53aa5fd2b33e6586c82dd1358ffc899b1ea7b
|
|
4
|
+
data.tar.gz: 190feb3886ad674687408879ee217a7a9e345c4c18d01df5ab933696ab8c531d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0741d6b76105d9d68fb7ecd871020e960069e8c4db157731c516262ee9ff402a269321e9ca977036e04aaa33a9567f372d10263b8b6067929d449cbb6c0a4bb3
|
|
7
|
+
data.tar.gz: e804acf9242d08991f4a6eb92e8f72604b60fc00895257014e87535511bd4cac5a3563fb87cb0bf25fef478e8784c908d76d4953c56343b3ca81e212aee127a2
|
data/README.md
CHANGED
|
@@ -40,28 +40,30 @@ Or install it yourself as:
|
|
|
40
40
|
|
|
41
41
|
1日検索/期間検索に対応しております。
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|開始日|暦
|
|
46
|
-
|
|
47
|
-
|445/01/24|元嘉暦|
|
|
48
|
-
|698/02/16|儀鳳暦|A
|
|
49
|
-
| | |B
|
|
50
|
-
| | |C
|
|
51
|
-
|764/02/07|大衍暦|A
|
|
52
|
-
| | |B
|
|
53
|
-
| | |C
|
|
54
|
-
|862/02/03|宣明暦|
|
|
55
|
-
|1685/02/04|貞享暦|
|
|
56
|
-
|1755/02/11|宝暦暦|
|
|
57
|
-
|1798/02/16|寛政暦|
|
|
58
|
-
|1844/02/18|天保暦|
|
|
59
|
-
|1872/12/09|グレゴリオ暦|
|
|
43
|
+
下記表で暦算ありの暦は使用可能です。
|
|
44
|
+
|
|
45
|
+
|開始日|暦 |計算方法|暦算|没日|滅日|
|
|
46
|
+
|:----|:----|:----|:---|:---|:---|
|
|
47
|
+
|445/01/24|元嘉暦| |✓|-|-|
|
|
48
|
+
|698/02/16|儀鳳暦|A|✓|-|-|
|
|
49
|
+
| | |B|-|-|-|
|
|
50
|
+
| | |C|-|-|-|
|
|
51
|
+
|764/02/07|大衍暦|A|✓|✓|✓|
|
|
52
|
+
| | |B|-|-|-|
|
|
53
|
+
| | |C|-|-|-|
|
|
54
|
+
|862/02/03|宣明暦| |✓|✓|✓|
|
|
55
|
+
|1685/02/04|貞享暦| |-|-|-|
|
|
56
|
+
|1755/02/11|宝暦暦| |-|-|-|
|
|
57
|
+
|1798/02/16|寛政暦| |-|-|-|
|
|
58
|
+
|1844/02/18|天保暦| |-|-|-|
|
|
59
|
+
|1872/12/09|グレゴリオ暦| |-|-|-|
|
|
60
60
|
|
|
61
61
|
表中A-Cは月の運動の計算手順ごとに分類されます。
|
|
62
62
|
|
|
63
63
|
現在は「長慶宣明暦算法」の計算手順Aのみ対応しております。
|
|
64
64
|
|
|
65
|
+
「没日」「滅日」は計算できますが、正誤を確認中です。
|
|
66
|
+
|
|
65
67
|
# 使用方法
|
|
66
68
|
|
|
67
69
|
[使用方法](./doc/usage.md) を参照してください。
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.9.
|
|
1
|
+
0.9.2
|
data/doc/condition.md
CHANGED
data/doc/expection.md
CHANGED
|
@@ -106,3 +106,14 @@
|
|
|
106
106
|
| 二十四節気 | | solar_term | | Zakuro::Result::Data::Option::DroppedDate::SolarTerm | | |
|
|
107
107
|
| 二十四節気番号 | | | index | Integer | 6 | |
|
|
108
108
|
| 二十四節気の大余小余 | | | remainder | String | 49-7203 | |
|
|
109
|
+
|
|
110
|
+
#### Zakuro::Result::Data::Option::VanishedDate::Option
|
|
111
|
+
|
|
112
|
+
キー: vanished_date
|
|
113
|
+
|
|
114
|
+
| 項目名 | キー名 | - | - | データ型 | 参考値 | 備考 |
|
|
115
|
+
| -------------------- | ----------- | ---------- | --------- | ------------------------------------------------------ | -------- | ------------------ |
|
|
116
|
+
| オプション値有無 | matched | | | True/False | true | |
|
|
117
|
+
| 演算値 | calculation | | | Zakuro::Result::Data::Option::VanishedDate::Calculation | | |
|
|
118
|
+
| 滅余 | | remainder | | String | 33-2666 | |
|
|
119
|
+
| 経朔 | | average_remainder | | String | 5-3769 | |
|
data/doc/operation/csv/month.csv
CHANGED
|
@@ -364,8 +364,8 @@
|
|
|
364
364
|
,228-1-1,-,-,228,1,1089-2-14,寛治 3年 1 大 壬申 9-6402,"計算では9癸酉であるが, 四大を避けるため壬申朔となった。正月壬申朔のユリウス暦日は2月13日。(大日本史料第3編の1; 中右記・扶桑略記・後二条師通記)。",-,true,四大回避,-,-,大,大,-,-,-,-,-,-,癸酉,壬申,1089-2-14,1089-2-13,9,8,-1,-1,-,-,-
|
|
365
365
|
,230-1-a,-,230-1-1,230,-,1095-1-9,嘉保 1年 12 小 戊辰 4-3361,-,-,true,次月大小,-,-,大,小,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
|
|
366
366
|
,230-1-1,-,-,230,1,1095-2-8,嘉保 2年 1 大 丁酉 34-7200,"計算では34戊戌であるが, 中右記により丁酉朔, 正月丁酉朔のユリウス暦日は2月7日。これは嘉保元年の年間日数が385日になるのを避けるための変更である。",-,true,年日数,-,-,小,大,-,-,-,-,-,-,戊戌,丁酉,1095-2-8,1095-2-7,34,33,-1,-1,-,-,-
|
|
367
|
-
,242-1-a,-,242-1-1,242,-,1129-8-17,大治 4年 閏7 小 丁未 43-1179,-,-,true
|
|
368
|
-
,242-1-1,-,-,242,1,1129-9-16,大治 4年 8 大 丙子 13-6547,"計算は13丁丑であるが中右記により丙子, 8月丙子朔のユリウス暦日は9月15日となる。これは皇和通暦で中根元圭が「章首の後, 閏法もし8月を得ればまた必ず大小を消息してこれを7月に退く」と書いてあるように, このあとも何回かこの理由で干支が変更され, 閏が8月から7月に移された。これを退閏という。",-,true
|
|
367
|
+
,242-1-a,-,242-1-1,242,-,1129-8-17,大治 4年 閏7 小 丁未 43-1179,-,-,true,次月大小,8月,閏7月,大,小,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
|
|
368
|
+
,242-1-1,-,-,242,1,1129-9-16,大治 4年 8 大 丙子 13-6547,"計算は13丁丑であるが中右記により丙子, 8月丙子朔のユリウス暦日は9月15日となる。これは皇和通暦で中根元圭が「章首の後, 閏法もし8月を得ればまた必ず大小を消息してこれを7月に退く」と書いてあるように, このあとも何回かこの理由で干支が変更され, 閏が8月から7月に移された。これを退閏という。",-,true,退閏,閏8月,8月,大,大,-,-,-,-,-,-,丁丑,丙子,1129-9-16,1129-9-15,13,12,-1,-1,-,-,-
|
|
369
369
|
,245-1-a,-,245-1-1,245,-,1138-1-13,保延 3年 12 小 戊午 54-2825,-,-,true,次月大小,-,-,大,小,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
|
|
370
370
|
,245-1-1,-,-,245,1,1138-2-12,保延 4年 1 大 丁亥 24-6432,"計算では24戊子であるが中右記により丁亥, 正月丁亥朔のユリウス暦日は2月11日となる。保延3年の年間日数の385日になるのを避けるためである。",-,true,年日数,-,-,小,大,-,-,-,-,-,-,戊子,丁亥,1138-2-12,1138-2-11,24,23,-1,-1,-,-,-
|
|
371
371
|
,251-1-a,-,251-1-1,251,-,1156-11-15,保元 1年 10 小 己亥 35-1816,-,-,true,次月大小,-,-,大,小,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
|
|
@@ -469,8 +469,8 @@
|
|
|
469
469
|
,346-0-1,-,-,346,-,1441-12-14/1442-1-13,-,計算では朔旦冬至となる。これを臨時朔旦冬至として避けるために甲子を癸亥にして冬至を11月2日にしたもの。12月の変更は計算通り甲午にしておくと11月が31日になってしまうから。,-,false,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
|
|
470
470
|
,348-1-a,-,348-1-1,348,-,1449-10-17,宝徳 1年 10 小 戊申 44-2244,-,-,true,次月大小,-,-,大,小,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
|
|
471
471
|
,348-1-1,348-0-1,-,348,1,1449-11-16,宝徳 1年 閏10 小 丁丑 14-22,"計算では14戊寅, 康富記により丁丑, 閏10月丁丑朔のユリウス暦日は11月15日となる。",-,true,朔旦冬至,11月,閏10月,小,小,0,-,-,-,1449-12-15,-,戊寅,丁丑,1449-11-16,1449-11-15,14,13,-1,-1,-,-,-
|
|
472
|
-
,348-2-1,348-0-1,-,348,2,1449-12-15,宝徳 1年 11 大 丙午 43-5895,"計算では43丁未, 康富記により丙午, 11月丙午朔のユリウス暦日は12月14日となる。",-,true
|
|
473
|
-
,348-3-1,348-0-1,-,348,3,1450-1-14,宝徳 1年 12 大 丙子 13-2995,"計算では13丁丑, 康富記により丙子, 12月丙子朔のユリウス暦日は1月13日となる。",-,true
|
|
472
|
+
,348-2-1,348-0-1,-,348,2,1449-12-15,宝徳 1年 11 大 丙午 43-5895,"計算では43丁未, 康富記により丙午, 11月丙午朔のユリウス暦日は12月14日となる。",-,true,朔旦冬至,12月,11月,大,大,-,0,-,-,-,1449-11-16,丁未,丙午,1449-12-15,1449-12-14,43,42,-1,-1,-,-,-
|
|
473
|
+
,348-3-1,348-0-1,-,348,3,1450-1-14,宝徳 1年 12 大 丙子 13-2995,"計算では13丁丑, 康富記により丙子, 12月丙子朔のユリウス暦日は1月13日となる。",-,true,朔旦冬至,閏12月,12月,大,大,-,-,-,-,-,-,丁丑,丙子,1450-1-14,1450-1-13,13,12,-1,-1,-,-,-
|
|
474
474
|
,348-0-1,-,-,348,-,1449-11-16/1450-2-13,-,"計算では冬至が11月晦日になるのを, 強いて朔旦冬至にするため計算の12月丁未朔を11月丙午朔に変え閏を10月に移動させた。閏10月朔を計算通り戊寅朔にしておくと閏10月は28日しかなくなってしまう。11月朔丙午, 翌宝徳2年2月丙子とからその間の12月正月の干支は丙子, 丙子に変えないと31日の月ができてしまう。",-,false,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
|
|
475
475
|
,349-1-1,348-0-1,-,349,1,1450-2-13,宝徳 2年 1 大 丙午 43-7539,"計算では13丁未, 康富記により丙午, 正月丙午朔のユリウス暦日は2月12日となる。(前項の注記参照)",日本暦日原典の誤り。「丁未」ではなく「丁丑」,true,朔旦冬至,-,-,小,大,-,-,-,-,-,-,丁未,丙午,1450-2-13,1450-2-12,43,42,-1,-1,-,-,-
|
|
476
476
|
,355-1-a,-,355-1-1,355,-,1468-10-16,応仁 2年 10 大 丁亥 23-4972,-,変更なし,false,次月大小,-,-,大,大,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
|
|
Binary file
|
|
@@ -23,9 +23,9 @@ module Zakuro
|
|
|
23
23
|
attr_reader :monthly_last_date
|
|
24
24
|
# @return [Reserve::AbstractRange] 予約範囲
|
|
25
25
|
attr_reader :range
|
|
26
|
-
# @return [Array<
|
|
26
|
+
# @return [Array<Counter>] 1行目元号
|
|
27
27
|
attr_reader :first_gengou
|
|
28
|
-
# @return [Array<
|
|
28
|
+
# @return [Array<Counter>] 2行目元号
|
|
29
29
|
attr_reader :second_gengou
|
|
30
30
|
# @return [Connector] 行変更済元号
|
|
31
31
|
attr_reader :connector
|
|
@@ -142,7 +142,7 @@ module Zakuro
|
|
|
142
142
|
first_last_year = first_list.western_last_year
|
|
143
143
|
second_last_year = second_list.western_last_year
|
|
144
144
|
|
|
145
|
-
return
|
|
145
|
+
return second_last_year if first_list.invalid?
|
|
146
146
|
|
|
147
147
|
return first_last_year if second_list.invalid?
|
|
148
148
|
|
|
@@ -187,7 +187,7 @@ module Zakuro
|
|
|
187
187
|
first_western_date = first_list.western_start_date
|
|
188
188
|
second_western_date = second_list.western_start_date
|
|
189
189
|
|
|
190
|
-
return
|
|
190
|
+
return second_list if first_western_date.invalid?
|
|
191
191
|
|
|
192
192
|
return first_list if second_western_date.invalid?
|
|
193
193
|
|
|
@@ -203,11 +203,11 @@ module Zakuro
|
|
|
203
203
|
# @return [False] 不正なし
|
|
204
204
|
#
|
|
205
205
|
def invalid_list?
|
|
206
|
-
return
|
|
206
|
+
return false unless first_list.invalid?
|
|
207
207
|
|
|
208
|
-
return
|
|
208
|
+
return false unless second_list.invalid?
|
|
209
209
|
|
|
210
|
-
|
|
210
|
+
true
|
|
211
211
|
end
|
|
212
212
|
end
|
|
213
213
|
end
|
|
@@ -58,7 +58,7 @@ module Zakuro
|
|
|
58
58
|
first_western_date = first_list.western_last_date
|
|
59
59
|
second_western_date = second_list.western_last_date
|
|
60
60
|
|
|
61
|
-
return
|
|
61
|
+
return second_list if first_western_date.invalid?
|
|
62
62
|
|
|
63
63
|
return first_list if second_western_date.invalid?
|
|
64
64
|
|
|
@@ -101,7 +101,8 @@ module Zakuro
|
|
|
101
101
|
|
|
102
102
|
@first_day = FirstDay.new(
|
|
103
103
|
western_date: rewrite_western_date(days: days),
|
|
104
|
-
remainder: rewrite_remainder(days: days)
|
|
104
|
+
remainder: rewrite_remainder(days: days),
|
|
105
|
+
average_remainder: rewrite_average_remainder(days: days)
|
|
105
106
|
)
|
|
106
107
|
end
|
|
107
108
|
|
|
@@ -121,6 +122,22 @@ module Zakuro
|
|
|
121
122
|
remainder
|
|
122
123
|
end
|
|
123
124
|
|
|
125
|
+
#
|
|
126
|
+
# 月初日の大余小余を日差分で書き換える(経朔)
|
|
127
|
+
#
|
|
128
|
+
# @param [Integer] days 日差分
|
|
129
|
+
#
|
|
130
|
+
# @return [Remainder] 月初日の大余小余
|
|
131
|
+
#
|
|
132
|
+
def rewrite_average_remainder(days:)
|
|
133
|
+
remainder = first_day.average_remainder.clone
|
|
134
|
+
remainder.add!(
|
|
135
|
+
context.resolver.remainder.new(day: days, minute: 0, second: 0)
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
remainder
|
|
139
|
+
end
|
|
140
|
+
|
|
124
141
|
#
|
|
125
142
|
# 月初日の西暦日を日差分で書き換える
|
|
126
143
|
#
|
|
@@ -78,23 +78,24 @@ module Zakuro
|
|
|
78
78
|
|
|
79
79
|
dropped_date = location.get
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
dropped_date_option(
|
|
82
|
+
matched: remainder.day == dropped_date.day, location: location
|
|
83
|
+
)
|
|
84
84
|
end
|
|
85
85
|
|
|
86
86
|
#
|
|
87
87
|
# 没日オプション値を生成する
|
|
88
88
|
#
|
|
89
|
+
# @param [True, False] matched 没日有無
|
|
89
90
|
# @param [Calculation::Option::DroppedDate::Location] location 没日位置
|
|
90
91
|
#
|
|
91
92
|
# @return [Result::Data::Option::DroppedDate::Option] 没日オプション値
|
|
92
93
|
#
|
|
93
|
-
def dropped_date_option(location:)
|
|
94
|
+
def dropped_date_option(matched:, location:)
|
|
94
95
|
dropped_date = location.get
|
|
95
96
|
solar_term = location.solar_term
|
|
96
97
|
Result::Data::Option::DroppedDate::Option.new(
|
|
97
|
-
matched:
|
|
98
|
+
matched: matched,
|
|
98
99
|
calculation: Result::Data::Option::DroppedDate::Calculation.new(
|
|
99
100
|
remainder: dropped_date.format,
|
|
100
101
|
solar_term: Result::Data::SolarTerm.new(
|
|
@@ -108,41 +109,47 @@ module Zakuro
|
|
|
108
109
|
#
|
|
109
110
|
# 滅日を求める
|
|
110
111
|
#
|
|
111
|
-
# @param [
|
|
112
|
-
# @param [
|
|
113
|
-
# @param [
|
|
112
|
+
# @param [Context::Context] context 暦コンテキスト
|
|
113
|
+
# @param [Cycle::AbstractRemainder] remainder 当日和暦日
|
|
114
|
+
# @param [Cycle::AbstractRemainder] average_remainder 経朔
|
|
114
115
|
#
|
|
115
|
-
# @return [
|
|
116
|
+
# @return [Result::Data::Option::VanishedDate::Option] 滅日オプション値
|
|
116
117
|
#
|
|
117
118
|
def vanished_date(context:, remainder:, average_remainder:)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return option if average_remainder.invalid?
|
|
119
|
+
return Result::Data::Option::VanishedDate::Option.new if average_remainder.invalid?
|
|
121
120
|
|
|
122
121
|
location = Calculation::Option::VanishedDate::Location.new(
|
|
123
122
|
context: context, average_remainder: average_remainder
|
|
124
123
|
)
|
|
125
124
|
|
|
126
|
-
|
|
125
|
+
unless location.exist?
|
|
126
|
+
# 結果確認のため経朔だけは設定する
|
|
127
|
+
return Result::Data::Option::VanishedDate::Option.new(
|
|
128
|
+
calculation: Result::Data::Option::VanishedDate::Calculation.new(
|
|
129
|
+
average_remainder: average_remainder
|
|
130
|
+
)
|
|
131
|
+
)
|
|
132
|
+
end
|
|
127
133
|
|
|
128
134
|
vanished_date = location.get
|
|
129
135
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
136
|
+
vanished_date_option(
|
|
137
|
+
matched: remainder.day == vanished_date.day, location: location
|
|
138
|
+
)
|
|
133
139
|
end
|
|
134
140
|
|
|
135
141
|
#
|
|
136
142
|
# 滅日オプション値を生成する
|
|
137
143
|
#
|
|
138
|
-
# @param [
|
|
144
|
+
# @param [True, False] matched 滅日有無
|
|
145
|
+
# @param [Calculation::Option::VanishedDate::Location] location 滅日位置
|
|
139
146
|
#
|
|
140
|
-
# @return [Result::Data::Option::
|
|
147
|
+
# @return [Result::Data::Option::VanishedDate::Option] 滅日オプション値
|
|
141
148
|
#
|
|
142
|
-
def vanished_date_option(location:)
|
|
149
|
+
def vanished_date_option(matched:, location:)
|
|
143
150
|
vanished_date = location.get
|
|
144
151
|
Result::Data::Option::VanishedDate::Option.new(
|
|
145
|
-
matched:
|
|
152
|
+
matched: matched,
|
|
146
153
|
calculation: Result::Data::Option::VanishedDate::Calculation.new(
|
|
147
154
|
remainder: vanished_date.format,
|
|
148
155
|
average_remainder: location.average_remainder
|
|
@@ -98,7 +98,7 @@ module Zakuro
|
|
|
98
98
|
# @return [Calendar] 年月日情報(和暦)
|
|
99
99
|
#
|
|
100
100
|
def parse(regex: FORMAT, text: '')
|
|
101
|
-
return Calendar.new unless
|
|
101
|
+
return Calendar.new unless valid_date_text(regex: regex, text: text)
|
|
102
102
|
|
|
103
103
|
matched = text.match(regex)
|
|
104
104
|
|
|
@@ -120,7 +120,7 @@ module Zakuro
|
|
|
120
120
|
# @return [True] 正しい
|
|
121
121
|
# @return [True] 正しくない
|
|
122
122
|
#
|
|
123
|
-
def
|
|
123
|
+
def valid_date_text(regex: FORMAT, text: '')
|
|
124
124
|
return false unless text
|
|
125
125
|
|
|
126
126
|
matched = text.match(regex)
|
|
@@ -315,7 +315,7 @@ module Zakuro
|
|
|
315
315
|
# @return [False] 正しくない
|
|
316
316
|
#
|
|
317
317
|
def japan?
|
|
318
|
-
Japan::Calendar.
|
|
318
|
+
Japan::Calendar.valid_date_text(text: japan)
|
|
319
319
|
end
|
|
320
320
|
|
|
321
321
|
#
|
|
@@ -325,7 +325,7 @@ module Zakuro
|
|
|
325
325
|
# @return [False] 正しくない
|
|
326
326
|
#
|
|
327
327
|
def western?
|
|
328
|
-
Western::Calendar.
|
|
328
|
+
Western::Calendar.valid_date_text(text: western)
|
|
329
329
|
end
|
|
330
330
|
end
|
|
331
331
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative './date_text'
|
|
4
|
+
|
|
3
5
|
require 'date'
|
|
4
6
|
|
|
5
7
|
# :nodoc:
|
|
@@ -402,9 +404,7 @@ module Zakuro
|
|
|
402
404
|
# @raise [ArgumentError] 引数エラー
|
|
403
405
|
#
|
|
404
406
|
def parse(text: '', type: Type::DEFAULT)
|
|
405
|
-
unless
|
|
406
|
-
raise ArgumentError, "invalid date string: #{text}"
|
|
407
|
-
end
|
|
407
|
+
raise ArgumentError, "invalid date string: #{text}" unless valid_date_text(text: text)
|
|
408
408
|
|
|
409
409
|
start = DATE_START.fetch(type, DATE_START[Type::DEFAULT])
|
|
410
410
|
date = Date.parse(text, start)
|
|
@@ -423,14 +423,8 @@ module Zakuro
|
|
|
423
423
|
# @return [True] 正しい
|
|
424
424
|
# @return [True] 正しくない
|
|
425
425
|
#
|
|
426
|
-
def
|
|
427
|
-
|
|
428
|
-
begin
|
|
429
|
-
Date.parse(text, start)
|
|
430
|
-
rescue ArgumentError => _e
|
|
431
|
-
return false
|
|
432
|
-
end
|
|
433
|
-
true
|
|
426
|
+
def valid_date_text(text: '')
|
|
427
|
+
DateText.validate(text: text)
|
|
434
428
|
end
|
|
435
429
|
end
|
|
436
430
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# :nodoc:
|
|
4
|
+
module Zakuro
|
|
5
|
+
#
|
|
6
|
+
# Western 西暦
|
|
7
|
+
#
|
|
8
|
+
module Western
|
|
9
|
+
#
|
|
10
|
+
# DateText 日付文字列
|
|
11
|
+
#
|
|
12
|
+
module DateText
|
|
13
|
+
# @return [Regexp] ハイフン区切り
|
|
14
|
+
HYPHEN = /^[0-9]{1,5}-[0-9]{1,2}-[0-9]{1,2}$/.freeze
|
|
15
|
+
# @return [Regexp] スラッシュ区切り
|
|
16
|
+
SLASH = %r{^[0-9]{1,5}/[0-9]{1,2}/[0-9]{1,2}$}.freeze
|
|
17
|
+
|
|
18
|
+
#
|
|
19
|
+
# 有効な日付文字列か検証する
|
|
20
|
+
#
|
|
21
|
+
# * 従来は Date.parse で日付文字列を検証していた
|
|
22
|
+
# * [貞観4年3月20日] のような文字列でも有効扱いになっていた
|
|
23
|
+
# * [20] [20日] のように2桁の数字が含まれると有効な日付扱いされる
|
|
24
|
+
# * 特定のフォーマットのみ受け付けるように改変した
|
|
25
|
+
#
|
|
26
|
+
# @param [String] text 文字列
|
|
27
|
+
#
|
|
28
|
+
# @return [True] 有効
|
|
29
|
+
# @return [True] 無効
|
|
30
|
+
#
|
|
31
|
+
def self.validate(text: '')
|
|
32
|
+
return true if HYPHEN.match(text)
|
|
33
|
+
|
|
34
|
+
return true if SLASH.match(text)
|
|
35
|
+
|
|
36
|
+
false
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -112,12 +112,12 @@ module Zakuro
|
|
|
112
112
|
# @param [String] text 日付文字列
|
|
113
113
|
#
|
|
114
114
|
def parse_text(text:)
|
|
115
|
-
if Western::Calendar.
|
|
115
|
+
if Western::Calendar.valid_date_text(text: text)
|
|
116
116
|
@western_date = Western::Calendar.parse(text: text)
|
|
117
117
|
return
|
|
118
118
|
end
|
|
119
119
|
|
|
120
|
-
return unless Japan::Calendar.
|
|
120
|
+
return unless Japan::Calendar.valid_date_text(text: text)
|
|
121
121
|
|
|
122
122
|
@japan_date = Japan::Calendar.parse(text: text)
|
|
123
123
|
end
|
|
@@ -136,7 +136,13 @@ module Zakuro
|
|
|
136
136
|
def western_date?(str: '')
|
|
137
137
|
return Western::Calendar.new if str == EMPTY_STRING
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
# 1316-11-16/1317-4-13
|
|
140
|
+
dates = str.split('/')
|
|
141
|
+
dates.each do |date|
|
|
142
|
+
return true if Western::Calendar.valid_date_text(text: date)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
false
|
|
140
146
|
end
|
|
141
147
|
end
|
|
142
148
|
end
|
|
@@ -11697,11 +11697,11 @@
|
|
|
11697
11697
|
diffs:
|
|
11698
11698
|
month:
|
|
11699
11699
|
number:
|
|
11700
|
-
src:
|
|
11701
|
-
dest:
|
|
11700
|
+
src: '8'
|
|
11701
|
+
dest: '7'
|
|
11702
11702
|
leaped:
|
|
11703
|
-
src:
|
|
11704
|
-
dest:
|
|
11703
|
+
src: 'false'
|
|
11704
|
+
dest: 'true'
|
|
11705
11705
|
days:
|
|
11706
11706
|
src: 大
|
|
11707
11707
|
dest: 小
|
|
@@ -11730,11 +11730,11 @@
|
|
|
11730
11730
|
diffs:
|
|
11731
11731
|
month:
|
|
11732
11732
|
number:
|
|
11733
|
-
src:
|
|
11734
|
-
dest:
|
|
11733
|
+
src: '8'
|
|
11734
|
+
dest: '8'
|
|
11735
11735
|
leaped:
|
|
11736
|
-
src:
|
|
11737
|
-
dest:
|
|
11736
|
+
src: 'true'
|
|
11737
|
+
dest: 'false'
|
|
11738
11738
|
days:
|
|
11739
11739
|
src: 大
|
|
11740
11740
|
dest: 大
|
|
@@ -15070,10 +15070,10 @@
|
|
|
15070
15070
|
diffs:
|
|
15071
15071
|
month:
|
|
15072
15072
|
number:
|
|
15073
|
-
src: '
|
|
15073
|
+
src: '12'
|
|
15074
15074
|
dest: '11'
|
|
15075
15075
|
leaped:
|
|
15076
|
-
src: '
|
|
15076
|
+
src: 'false'
|
|
15077
15077
|
dest: 'false'
|
|
15078
15078
|
days:
|
|
15079
15079
|
src: 大
|
|
@@ -15102,11 +15102,11 @@
|
|
|
15102
15102
|
diffs:
|
|
15103
15103
|
month:
|
|
15104
15104
|
number:
|
|
15105
|
-
src:
|
|
15106
|
-
dest:
|
|
15105
|
+
src: '12'
|
|
15106
|
+
dest: '12'
|
|
15107
15107
|
leaped:
|
|
15108
|
-
src:
|
|
15109
|
-
dest:
|
|
15108
|
+
src: 'true'
|
|
15109
|
+
dest: 'false'
|
|
15110
15110
|
days:
|
|
15111
15111
|
src: 大
|
|
15112
15112
|
dest: 大
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: zakuro
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- pldb
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-12-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: mainly lunar solar calendar
|
|
14
14
|
email:
|
|
@@ -143,6 +143,7 @@ files:
|
|
|
143
143
|
- lib/zakuro/era/japan/gengou/resource/yaml/set-003-modern.yaml
|
|
144
144
|
- lib/zakuro/era/japan/version.rb
|
|
145
145
|
- lib/zakuro/era/western/calendar.rb
|
|
146
|
+
- lib/zakuro/era/western/date_text.rb
|
|
146
147
|
- lib/zakuro/exception/case/pattern.rb
|
|
147
148
|
- lib/zakuro/exception/case/preset.rb
|
|
148
149
|
- lib/zakuro/exception/case/template.rb
|