zakuro 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|