mk_cal_jpl 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8002fb51681b81cae77f03a8d624ef1d94e1074d2aed760f75729b89c7f97b2
4
- data.tar.gz: bf5ceca5c75e856c5c12de6a7e317252edd44a51296685f92d4ba50f08ffa78c
3
+ metadata.gz: 1e30bc3dde183fcd292276e2c5bc490e10e5e3fb1924d13b62b9ef151e6ffdbd
4
+ data.tar.gz: 2f86b74f9f21ded36a21d22181bf1b96370bfe712d0abea466ec30fdffc242c4
5
5
  SHA512:
6
- metadata.gz: 0cc04f7e31ebba4f97d591b124f670f00bb422b321bb23642ace9d548f6c12e98b4cdca481f72848897745ce50849f867f8b6b4649c01711a26390a2a35322e9
7
- data.tar.gz: e33ca92673b6a13d0c25c093b60bf323d80c656dd30dcafdcbcc40cd7b8914ee0c59832c8a5a711ab0882fe38f5b1dd4fe7ebb7ae9dbbab9a2bd6cf2311059b7
6
+ metadata.gz: c6e5f29ad7be9e145c382e5d8f4108f7bc93e72fee5a58a1fdade8ae328838b876254956e1994e12f664157e5bfe40b6b97758816d7806d5058a1e98a2cc11f6
7
+ data.tar.gz: 706f98e2cdb465eba1ce947af70ea3cd9557f02a40e9cbe1a8d1ec9c6b6c891d8086ecf63e62f92c8e36259e6311a065464ba62a3f1d25e838f6e7ab3ff58f79
@@ -10,7 +10,7 @@ module MkCalJpl
10
10
  # @param: year
11
11
  # @param: month
12
12
  # @param: day
13
- # @return: holiday (漢字1文字)
13
+ # @return: holiday (漢字)
14
14
  #=========================================================================
15
15
  def compute_holiday(year, month, day)
16
16
  holidays = get_holidays(year)
@@ -35,8 +35,8 @@ module MkCalJpl
35
35
  #=========================================================================
36
36
  def get_holidays(year)
37
37
  holiday_0 = Array.new # 変動の祝日用
38
- holiday_1 = Array.new # 国民の休日用
39
- holiday_2 = Array.new # 振替休日用
38
+ holiday_1 = Array.new # 振替休日用
39
+ holiday_2 = Array.new # 国民の休日用
40
40
 
41
41
  # 変動の祝日の日付・曜日を計算 ( 振替休日,国民の休日を除く )
42
42
  Const::HOLIDAY.each do |id, month, day, kbn, year_s, year_e, name|
@@ -77,34 +77,17 @@ module MkCalJpl
77
77
  end
78
78
  end
79
79
 
80
- # 国民の休日計算
81
- # ( 「国民の祝日」で前後を挟まれた「国民の祝日」でない日 )
82
- # ( 年またぎは考慮していない(今のところ不要) )
83
- year_s_k = Const::HOLIDAY.select { |a| a[0] == 90 }[0][4]
84
- 0.upto(holiday_0.length - 2) do |i|
85
- m_0, d_0 = holiday_0[i ][0, 2]
86
- m_1, d_1 = holiday_0[i + 1][0, 2]
87
- jd_0 = gc2jd(year, m_0, d_0)
88
- jd_1 = gc2jd(year, m_1, d_1)
89
- if jd_0 + 2 == jd_1
90
- jd = jd_0 + 1
91
- m, d = jd2ymd(jd)[1, 2]
92
- yobi = Const::YOBI[Const::YOBI.index(holiday_0[i][4]) + 1]
93
- holiday_1 << [m, d, 90, jd, yobi]
94
- end
95
- end if year < year_s_k
96
-
97
80
  # 振替休日計算
98
81
  # ( 「国民の祝日」が日曜日に当たるときは、
99
82
  # その日後においてその日に最も近い「国民の祝日」でない日 )
100
- year_s_f = Const::HOLIDAY.select { |a| a[0] == 91 }[0][4]
83
+ year_s_f = Const::HOLIDAY.select { |a| a[0] == 90 }[0][4]
101
84
  0.upto(holiday_0.length - 1) do |i|
102
85
  if holiday_0[i][4] == "日"
103
86
  next_jd = holiday_0[i][3] + 1
104
87
  next_yobi = Const::YOBI[Const::YOBI.index(holiday_0[i][4]) + 1]
105
88
  if i == holiday_0.length - 1
106
89
  wk_ymd = jd2ymd(next_jd)
107
- wk_ary = [wk_ymd[1], wk_ymd[2], 91, next_jd, next_yobi]
90
+ wk_ary = [wk_ymd[1], wk_ymd[2], 90, next_jd, next_yobi]
108
91
  else
109
92
  flg_furikae = 0
110
93
  plus_day = 1
@@ -118,15 +101,32 @@ module MkCalJpl
118
101
  else
119
102
  flg_furikae = 1
120
103
  wk_ymd = jd2ymd(next_jd)
121
- wk_ary =[wk_ymd[1], wk_ymd[2], 91, next_jd, next_yobi]
104
+ wk_ary =[wk_ymd[1], wk_ymd[2], 90, next_jd, next_yobi]
122
105
  end
123
106
  end
124
107
  end
125
108
  end
126
- holiday_2 << wk_ary
109
+ holiday_1 << wk_ary
110
+ end
111
+ end if year >= year_s_f
112
+
113
+ # 国民の休日計算
114
+ # ( 「国民の祝日」で前後を挟まれた「国民の祝日」でない日 )
115
+ # ( 年またぎは考慮していない(今のところ不要) )
116
+ year_s_k = Const::HOLIDAY.select { |a| a[0] == 91 }[0][4]
117
+ 0.upto(holiday_0.length - 2) do |i|
118
+ m_0, d_0 = holiday_0[i ][0, 2]
119
+ m_1, d_1 = holiday_0[i + 1][0, 2]
120
+ jd_0 = gc2jd(year, m_0, d_0)
121
+ jd_1 = gc2jd(year, m_1, d_1)
122
+ if jd_0 + 2 == jd_1
123
+ jd = jd_0 + 1
124
+ m, d = jd2ymd(jd)[1, 2]
125
+ yobi = Const::YOBI[Const::YOBI.index(holiday_0[i][4]) + 1]
126
+ holiday_2 << [m, d, 91, jd, yobi]
127
127
  end
128
- end if year < year_s_f
129
- return (holiday_0 + holiday_1 + holiday_2).sort
128
+ end if year >= year_s_k
129
+ return merge_sort(holiday_0, holiday_1, holiday_2)
130
130
  end
131
131
 
132
132
  #=========================================================================
@@ -661,6 +661,27 @@ module MkCalJpl
661
661
  lmd = a.moon[1][0] * 180.0 / Math::PI
662
662
  return lmd
663
663
  end
664
+
665
+ private
666
+
667
+ # マージ&ソート
668
+ # * さらに、「振替休日」と「国民の休日」がダブる場合は、
669
+ # 「振替休日」を優先
670
+ def merge_sort(hol_0, hol_1, hol_2)
671
+ data = Array.new
672
+ data_src = (hol_0 + hol_1 + hol_2).sort
673
+ data_src.each_with_index do |d, i|
674
+ if i == 0
675
+ data << d
676
+ next
677
+ end
678
+ if data_src[i - 1][0..2] == d[0..2]
679
+ next if data_src[i - 1][3] == 90 && d[3] == 91
680
+ end
681
+ data << d
682
+ end
683
+ return data
684
+ end
664
685
  end
665
686
  end
666
687
 
@@ -69,8 +69,8 @@ module MkCalJpl
69
69
  [29, 2, 24, 0, 1989, 1989, "昭和天皇の大喪の礼"],
70
70
  [30, 11, 12, 0, 1990, 1990, "即位礼正殿の儀" ],
71
71
  [31, 6, 9, 0, 1993, 1993, "徳仁親王の結婚の儀"],
72
- [90, 0, 0, 8, 1986, 9999, "国民の休日" ],
73
- [91, 0, 0, 9, 1973, 9999, "振替休日" ] # 1973-04-12 以降
72
+ [90, 0, 0, 8, 1973, 9999, "振替休日" ], # 1973-04-12 以降
73
+ [91, 0, 0, 9, 1986, 9999, "国民の休日" ]
74
74
  ]
75
75
  end
76
76
  end
@@ -1,3 +1,3 @@
1
1
  module MkCalJpl
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mk_cal_jpl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - komasaru
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-06-13 00:00:00.000000000 Z
11
+ date: 2018-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mk_apos