date-holiday 0.0.1
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 +7 -0
- data/LICENSE +26 -0
- data/MANUAL +28 -0
- data/MANUAL.en +25 -0
- data/MANUAL.en.html +48 -0
- data/MANUAL.en.rd +28 -0
- data/MANUAL.html +54 -0
- data/MANUAL.rd +36 -0
- data/README +49 -0
- data/README.en +56 -0
- data/example/goodfriday.rb +35 -0
- data/example/ncal.rb +225 -0
- data/lib/date/holiday.rb +269 -0
- metadata +55 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: ce42e68e404159b0d65ea1f92c61a7f86d51f430
|
|
4
|
+
data.tar.gz: 4a15256f08173ce195a07a41a1fea3b441985dce
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 1a49ac097801f05c73b14957e9a521b64e560527e8eabe2ac5fda271cd14742e37d0826e4c164417ddaa84800d163b1c7300918aa19ed70e60cad043681291a3
|
|
7
|
+
data.tar.gz: f8e9f9dce74c27ae837ec875892f4165fa491fb50250edc8b7b3bd74a8a3956021c28518eb28b3793f94178407b8a2b249d4ee7fc1c7878d82bf657ea53ba940
|
data/LICENSE
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
Copyright (c) 1998-2014, Tadayoshi Funaba
|
|
2
|
+
All rights reserved.
|
|
3
|
+
|
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
|
5
|
+
modification, are permitted provided that the following conditions are
|
|
6
|
+
met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright
|
|
9
|
+
notice, this list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
12
|
+
notice, this list of conditions and the following disclaimer in the
|
|
13
|
+
documentation and/or other materials provided with the
|
|
14
|
+
distribution.
|
|
15
|
+
|
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
17
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
18
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
19
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
20
|
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
21
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
22
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
23
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
24
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
25
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
26
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/MANUAL
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
Date
|
|
3
|
+
|
|
4
|
+
クラスメソッド
|
|
5
|
+
|
|
6
|
+
gregorian_easter(year[, start])
|
|
7
|
+
easter(year[, start])
|
|
8
|
+
グレゴリオ暦における、その年の復活祭の日曜日を返します。
|
|
9
|
+
|
|
10
|
+
julian_easter(year[, start])
|
|
11
|
+
ユリウス暦における、その年の復活祭の日曜日を返します。
|
|
12
|
+
|
|
13
|
+
メソッド
|
|
14
|
+
|
|
15
|
+
easter?
|
|
16
|
+
復活祭の日曜日であれば真を返します。
|
|
17
|
+
|
|
18
|
+
national_holiday?
|
|
19
|
+
「国民の祝日に関する法律」による休日、 もしくは、いくつかの特別な休日であれば真を返します。
|
|
20
|
+
|
|
21
|
+
このメソッドは、第八次改正 「国民の祝日に関する法律の一部を改正する法律」
|
|
22
|
+
(平成17年5月20日号外法律43号)に対応済みです。
|
|
23
|
+
|
|
24
|
+
春分日、秋分日は前年の2月はじめの官報に掲載されるものが正しいのですが、 ここでは計算で求めています。
|
|
25
|
+
つまり将来については間違えることもあるかもしれません。 なお、平成21年 (2009) 分までは官報等により確認済みです。
|
|
26
|
+
|
|
27
|
+
old_national_holiday?
|
|
28
|
+
舊祝祭日であれば眞を返します。 此は未だ實驗的な代物で有ります。
|
data/MANUAL.en
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
Date
|
|
3
|
+
|
|
4
|
+
Class Methods
|
|
5
|
+
|
|
6
|
+
gregorian_easter(year[, start])
|
|
7
|
+
easter(year[, start])
|
|
8
|
+
Returns a date object denoting the Easter sunday in the given
|
|
9
|
+
Gregorian year.
|
|
10
|
+
|
|
11
|
+
julian_easter(year[, start])
|
|
12
|
+
Returns a date object denoting the Easter sunday in the given
|
|
13
|
+
Julian year.
|
|
14
|
+
|
|
15
|
+
Methods
|
|
16
|
+
|
|
17
|
+
easter?
|
|
18
|
+
Returns true if the day is an Easter sunday.
|
|
19
|
+
|
|
20
|
+
national_holiday?
|
|
21
|
+
Returns true if the day is a Japanese national holiday.
|
|
22
|
+
|
|
23
|
+
old_national_holiday?
|
|
24
|
+
Returns true if the day is an old Japanese national holiday.
|
|
25
|
+
This is still experimental.
|
data/MANUAL.en.html
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
|
2
|
+
<!DOCTYPE html
|
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
|
|
6
|
+
<head>
|
|
7
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
|
8
|
+
<title>Date</title>
|
|
9
|
+
<link href="styles/default.css" type="text/css" rel="stylesheet" />
|
|
10
|
+
<link href="index.html" rel="index" />
|
|
11
|
+
<link href="mailto:tadf@funaba.org" rev="made" />
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<h1><a name="label-0" id="label-0">date/holiday - determination of secular and religious holidays</a></h1><!-- RDLabel: "date/holiday - determination of secular and religious holidays" -->
|
|
15
|
+
<h2><a name="label-1" id="label-1">Date</a></h2><!-- RDLabel: "Date" -->
|
|
16
|
+
<h3><a name="label-2" id="label-2">Class Methods</a></h3><!-- RDLabel: "Class Methods" -->
|
|
17
|
+
<dl>
|
|
18
|
+
<dt><a name="label-3" id="label-3">gregorian_easter(year[, start])</a></dt><!-- RDLabel: "gregorian_easter(year[, start])" -->
|
|
19
|
+
<dt><a name="label-4" id="label-4">easter(year[, start])</a></dt><!-- RDLabel: "easter(year[, start])" -->
|
|
20
|
+
<dd>
|
|
21
|
+
Returns a date object denoting
|
|
22
|
+
the Easter sunday in the given Gregorian year.
|
|
23
|
+
</dd>
|
|
24
|
+
<dt><a name="label-5" id="label-5">julian_easter(year[, start])</a></dt><!-- RDLabel: "julian_easter(year[, start])" -->
|
|
25
|
+
<dd>
|
|
26
|
+
Returns a date object denoting
|
|
27
|
+
the Easter sunday in the given Julian year.
|
|
28
|
+
</dd>
|
|
29
|
+
</dl>
|
|
30
|
+
<h3><a name="label-6" id="label-6">Methods</a></h3><!-- RDLabel: "Methods" -->
|
|
31
|
+
<dl>
|
|
32
|
+
<dt><a name="label-7" id="label-7">easter?</a></dt><!-- RDLabel: "easter?" -->
|
|
33
|
+
<dd>
|
|
34
|
+
Returns true if the day is an Easter sunday.
|
|
35
|
+
</dd>
|
|
36
|
+
<dt><a name="label-8" id="label-8">national_holiday?</a></dt><!-- RDLabel: "national_holiday?" -->
|
|
37
|
+
<dd>
|
|
38
|
+
Returns true if the day is a Japanese national holiday.
|
|
39
|
+
</dd>
|
|
40
|
+
<dt><a name="label-9" id="label-9">old_national_holiday?</a></dt><!-- RDLabel: "old_national_holiday?" -->
|
|
41
|
+
<dd>
|
|
42
|
+
Returns true if the day is an old Japanese national holiday.
|
|
43
|
+
This is still experimental.
|
|
44
|
+
</dd>
|
|
45
|
+
</dl>
|
|
46
|
+
|
|
47
|
+
</body>
|
|
48
|
+
</html>
|
data/MANUAL.en.rd
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
= date/holiday - determination of secular and religious holidays
|
|
3
|
+
|
|
4
|
+
== Date
|
|
5
|
+
|
|
6
|
+
=== Class Methods
|
|
7
|
+
|
|
8
|
+
: gregorian_easter(year[, start])
|
|
9
|
+
: easter(year[, start])
|
|
10
|
+
Returns a date object denoting
|
|
11
|
+
the Easter sunday in the given Gregorian year.
|
|
12
|
+
|
|
13
|
+
: julian_easter(year[, start])
|
|
14
|
+
Returns a date object denoting
|
|
15
|
+
the Easter sunday in the given Julian year.
|
|
16
|
+
|
|
17
|
+
=== Methods
|
|
18
|
+
|
|
19
|
+
: easter?
|
|
20
|
+
Returns true if the day is an Easter sunday.
|
|
21
|
+
|
|
22
|
+
: national_holiday?
|
|
23
|
+
Returns true if the day is a Japanese national holiday.
|
|
24
|
+
|
|
25
|
+
: old_national_holiday?
|
|
26
|
+
Returns true if the day is an old Japanese national holiday.
|
|
27
|
+
This is still experimental.
|
|
28
|
+
=end
|
data/MANUAL.html
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
|
2
|
+
<!DOCTYPE html
|
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
|
|
6
|
+
<head>
|
|
7
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
|
8
|
+
<title>Date</title>
|
|
9
|
+
<link href="styles/default.css" type="text/css" rel="stylesheet" />
|
|
10
|
+
<link href="index.html" rel="index" />
|
|
11
|
+
<link href="mailto:tadf@funaba.org" rev="made" />
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<h1><a name="label-0" id="label-0">date/holiday - 祝祭日の判定</a></h1><!-- RDLabel: "date/holiday - 祝祭日の判定" -->
|
|
15
|
+
<h2><a name="label-1" id="label-1">Date</a></h2><!-- RDLabel: "Date" -->
|
|
16
|
+
<h3><a name="label-2" id="label-2">クラスメソッド</a></h3><!-- RDLabel: "クラスメソッド" -->
|
|
17
|
+
<dl>
|
|
18
|
+
<dt><a name="label-3" id="label-3">gregorian_easter(year[, start])</a></dt><!-- RDLabel: "gregorian_easter(year[, start])" -->
|
|
19
|
+
<dt><a name="label-4" id="label-4">easter(year[, start])</a></dt><!-- RDLabel: "easter(year[, start])" -->
|
|
20
|
+
<dd>
|
|
21
|
+
グレゴリオ暦における、その年の復活祭の日曜日を返します。
|
|
22
|
+
</dd>
|
|
23
|
+
<dt><a name="label-5" id="label-5">julian_easter(year[, start])</a></dt><!-- RDLabel: "julian_easter(year[, start])" -->
|
|
24
|
+
<dd>
|
|
25
|
+
ユリウス暦における、その年の復活祭の日曜日を返します。
|
|
26
|
+
</dd>
|
|
27
|
+
</dl>
|
|
28
|
+
<h3><a name="label-6" id="label-6">メソッド</a></h3><!-- RDLabel: "メソッド" -->
|
|
29
|
+
<dl>
|
|
30
|
+
<dt><a name="label-7" id="label-7">easter?</a></dt><!-- RDLabel: "easter?" -->
|
|
31
|
+
<dd>
|
|
32
|
+
復活祭の日曜日であれば真を返します。
|
|
33
|
+
</dd>
|
|
34
|
+
<dt><a name="label-8" id="label-8">national_holiday?</a></dt><!-- RDLabel: "national_holiday?" -->
|
|
35
|
+
<dd>
|
|
36
|
+
<p>「国民の祝日に関する法律」による休日、
|
|
37
|
+
もしくは、いくつかの特別な休日であれば真を返します。</p>
|
|
38
|
+
<p>このメソッドは、第八次改正
|
|
39
|
+
「国民の祝日に関する法律の一部を改正する法律」
|
|
40
|
+
(平成17年5月20日号外法律43号)に対応済みです。</p>
|
|
41
|
+
<p>春分日、秋分日は前年の2月はじめの官報に掲載されるものが正しいのですが、
|
|
42
|
+
ここでは計算で求めています。
|
|
43
|
+
つまり将来については間違えることもあるかもしれません。
|
|
44
|
+
なお、平成21年 (2009) 分までは官報等により確認済みです。</p>
|
|
45
|
+
</dd>
|
|
46
|
+
<dt><a name="label-9" id="label-9">old_national_holiday?</a></dt><!-- RDLabel: "old_national_holiday?" -->
|
|
47
|
+
<dd>
|
|
48
|
+
舊祝祭日であれば眞を返します。
|
|
49
|
+
此は未だ實驗的な代物で有ります。
|
|
50
|
+
</dd>
|
|
51
|
+
</dl>
|
|
52
|
+
|
|
53
|
+
</body>
|
|
54
|
+
</html>
|
data/MANUAL.rd
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
= date/holiday - �˺�����Ƚ��
|
|
3
|
+
|
|
4
|
+
== Date
|
|
5
|
+
|
|
6
|
+
=== ���饹��å�
|
|
7
|
+
|
|
8
|
+
: gregorian_easter(year[, start])
|
|
9
|
+
: easter(year[, start])
|
|
10
|
+
���쥴�ꥪ��ˤ����롢����ǯ������פ����������֤��ޤ���
|
|
11
|
+
|
|
12
|
+
: julian_easter(year[, start])
|
|
13
|
+
��ꥦ����ˤ����롢����ǯ������פ����������֤��ޤ���
|
|
14
|
+
|
|
15
|
+
=== ��å�
|
|
16
|
+
|
|
17
|
+
: easter?
|
|
18
|
+
����פ��������Ǥ���п����֤��ޤ���
|
|
19
|
+
|
|
20
|
+
: national_holiday?
|
|
21
|
+
�ֹ�̱�ν����˴ؤ���ˡΧ�פˤ�������
|
|
22
|
+
�⤷���ϡ������Ĥ������̤ʵ����Ǥ���п����֤��ޤ���
|
|
23
|
+
|
|
24
|
+
���Υ�åɤϡ���Ȭ������
|
|
25
|
+
�ֹ�̱�ν����˴ؤ���ˡΧ�ΰ������������ˡΧ��
|
|
26
|
+
(ʿ��17ǯ5��20���泰ˡΧ43��)���б��ѤߤǤ���
|
|
27
|
+
|
|
28
|
+
��ʬ������ʬ������ǯ��2��Ϥ���δ���˷Ǻܤ�����Τ��������ΤǤ�����
|
|
29
|
+
�����ǤϷ��ǵ��Ƥ��ޤ���
|
|
30
|
+
�Ĥޤ꾭��ˤĤ��Ƥϴְ㤨�뤳�Ȥ⤢�뤫�⤷��ޤ���
|
|
31
|
+
�ʤ���ʿ��21ǯ (2009) ʬ�ޤǤϴ������ˤ���ǧ�ѤߤǤ���
|
|
32
|
+
|
|
33
|
+
: old_national_holiday?
|
|
34
|
+
�ѽ˺����Ǥ�����ä��֤��ޤ���
|
|
35
|
+
����̤������Ū����ʪ��ͭ��ޤ���
|
|
36
|
+
=end
|
data/README
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
�˺�����Ƚ��
|
|
2
|
+
============
|
|
3
|
+
|
|
4
|
+
date/holiday �Ϥ����Ĥ��ν���Ƚ��ΰ٤Υ�åɤ����ޤ���������
|
|
5
|
+
date2 ���������ʪ�Ǥ���
|
|
6
|
+
|
|
7
|
+
���路���ϡ��ե����� MANUAL �Ȥ��Ƥ���������
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
���ȡ���
|
|
11
|
+
------------
|
|
12
|
+
|
|
13
|
+
������ץ� "install.rb" ��Ĥ����ޤ���
|
|
14
|
+
|
|
15
|
+
$ ruby install.rb config
|
|
16
|
+
$ ruby install.rb setup
|
|
17
|
+
($ su)
|
|
18
|
+
# ruby install.rb install
|
|
19
|
+
|
|
20
|
+
���路���ϡ�"ruby install.rb --help" �Ȥ��Ƥ���������
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
����ʸ��
|
|
24
|
+
--------
|
|
25
|
+
|
|
26
|
+
Jean Meeus, Astronomical Algorithms, Willmann-Bell,Inc., 1991.
|
|
27
|
+
|
|
28
|
+
Nachum Dershowitz and Edward M. Reingold, ``Calendrical
|
|
29
|
+
Calculations'', Software---Practice & Experience, vol. 20, no. 9
|
|
30
|
+
(Sept. 1990), pp. 899--928.
|
|
31
|
+
|
|
32
|
+
���������ԡֿ����������Ģ�����Ҹ����� 1991
|
|
33
|
+
|
|
34
|
+
��̱�ν����˴ؤ���ˡΧ (����23ǯ7��20��ˡΧ��178�� - ʿ��13ǯ6��22������)
|
|
35
|
+
|
|
36
|
+
����ǰ�����Ȥʤ������������� (����41ǯ12��9���泰������376��)
|
|
37
|
+
|
|
38
|
+
����ŷ�Ĥ����Ӥ���ιԤ�����������Ȥ���ˡΧ (ʿ����ǯ2��17��ˡΧ��4��)
|
|
39
|
+
|
|
40
|
+
¨�������¤ε��ιԤ�����������Ȥ���ˡΧ (ʿ��2ǯ6��1��ˡΧ��24��)
|
|
41
|
+
|
|
42
|
+
���������οƲ��η뺧�ε��ιԤ�����������Ȥ���ˡΧ (ʿ��5ǯ4��30��ˡΧ��32��)
|
|
43
|
+
|
|
44
|
+
�����������������Խ����ԡ�20����������������������� 1998
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
�դʤФ����褷
|
|
48
|
+
mailto:tadf@funaba.org
|
|
49
|
+
http://www.funaba.org/
|
data/README.en
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
Determination of holidays
|
|
2
|
+
=========================
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
date/holiday provides methods about determination of holidays. This
|
|
6
|
+
methdos are derivative of date2.
|
|
7
|
+
|
|
8
|
+
For more information, see the file MANUAL.en.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
Install
|
|
12
|
+
-------
|
|
13
|
+
|
|
14
|
+
Use the script "install.rb".
|
|
15
|
+
|
|
16
|
+
$ ruby install.rb config
|
|
17
|
+
$ ruby install.rb setup
|
|
18
|
+
($ su)
|
|
19
|
+
# ruby install.rb install
|
|
20
|
+
|
|
21
|
+
For more information, type "ruby install.rb --help".
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
References
|
|
25
|
+
----------
|
|
26
|
+
|
|
27
|
+
Jean Meeus, Astronomical Algorithms, Willmann-Bell,Inc., 1991.
|
|
28
|
+
|
|
29
|
+
Nachum Dershowitz and Edward M. Reingold, "Calendrical Calculations",
|
|
30
|
+
Software---Practice & Experience, vol. 20, no. 9 (Sept. 1990),
|
|
31
|
+
pp. 899--928.
|
|
32
|
+
|
|
33
|
+
Koyomi-Keisan Kenkyū-kai, Shin Koyomi Benrichō, Kōseisha Kōseikaku,
|
|
34
|
+
1991
|
|
35
|
+
|
|
36
|
+
Kokumin no Shukujitsu ni Kansuru Hōritsu (Shōwa 23 nen 7 gatsu 20 ka
|
|
37
|
+
Hōritsu Dai 178 Gō - Heisei 13 nen 6 gatsu 22 nichi Kaisei)
|
|
38
|
+
|
|
39
|
+
Kenkoku-Kinen-no-Hi Tonaru Hi o Sadameru Seirei (Shōwa 41 nen 12 gatsu
|
|
40
|
+
9 ka Gōgai Seirei Dai 376 Gō)
|
|
41
|
+
|
|
42
|
+
Shōwa-Ten'nō no Taisō-no-Rei no Okonawareru Hi o Kyūjitsu Tosuru
|
|
43
|
+
Hōritsu (Heisei Gannen 2 gatsu 17 nichi Hōritsu Dai 4 Gō)
|
|
44
|
+
|
|
45
|
+
Sokui-Rei-Seiden-no-Gi no Okonawareru Hi o kyūjitsu Tosuru Hōritsu
|
|
46
|
+
(Heisei 2 nen 6 gatsu 1 chi Hōritsu Dai 24 Gō)
|
|
47
|
+
|
|
48
|
+
Kōtaishi Norihito-Shin'nō no Kekkon-no-Gi no Okonawareru Hi o Kyūjitsu
|
|
49
|
+
Tosuru Hōritsu (Heisei 5 nen 4 gatsu 30 nichi Hōritsu Dai 32 Gō)
|
|
50
|
+
|
|
51
|
+
Nichigai Associates, 20 Seiki-reki, Nichigai Associates 1998
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
Tadayoshi Funaba
|
|
55
|
+
mailto:tadf@funaba.org
|
|
56
|
+
http://www.funaba.org/
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#! /usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# goodfriday.rb: Written by Tadayoshi Funaba 1998-2002
|
|
4
|
+
# $Id: goodfriday.rb,v 2.4 2002-06-08 00:40:29+09 tadf Exp $
|
|
5
|
+
|
|
6
|
+
require 'date'
|
|
7
|
+
require 'date/holiday'
|
|
8
|
+
|
|
9
|
+
es = Date.easter(Date.today.year)
|
|
10
|
+
[[-9*7, 'Septuagesima Sunday'],
|
|
11
|
+
[-8*7, 'Sexagesima Sunday'],
|
|
12
|
+
[-7*7, 'Quinquagesima Sunday (Shrove Sunday)'],
|
|
13
|
+
[-48, 'Shrove Monday'],
|
|
14
|
+
[-47, 'Shrove Tuesday'],
|
|
15
|
+
[-46, 'Ash Wednesday'],
|
|
16
|
+
[-6*7, 'Quadragesima Sunday'],
|
|
17
|
+
[-3*7, 'Mothering Sunday'],
|
|
18
|
+
[-2*7, 'Passion Sunday'],
|
|
19
|
+
[-7, 'Palm Sunday'],
|
|
20
|
+
[-3, 'Maunday Thursday'],
|
|
21
|
+
[-2, 'Good Friday'],
|
|
22
|
+
[-1, 'Easter Eve'],
|
|
23
|
+
[0, 'Easter Day'],
|
|
24
|
+
[1, 'Easter Monday'],
|
|
25
|
+
[7, 'Low Sunday'],
|
|
26
|
+
[5*7, 'Rogation Sunday'],
|
|
27
|
+
[39, 'Ascension Day (Holy Thursday)'],
|
|
28
|
+
[42, 'Sunday after Ascension Day'],
|
|
29
|
+
[7*7, 'Pentecost (Whitsunday)'],
|
|
30
|
+
[50, 'Whitmonday'],
|
|
31
|
+
[8*7, 'Trinity Sunday'],
|
|
32
|
+
[60, 'Corpus Christi (Thursday after Trinity)']].
|
|
33
|
+
each do |xs|
|
|
34
|
+
puts((es + xs.shift).to_s + ' ' + xs.shift)
|
|
35
|
+
end
|
data/example/ncal.rb
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
#! /usr/bin/env ruby -Ku
|
|
2
|
+
|
|
3
|
+
# ncal.rb: Written by Tadayoshi Funaba 1998-2004,2006,2008,2014
|
|
4
|
+
# $Id: ncal.rb,v 2.12 2014-04-07 20:19:01+09 tadf Exp $
|
|
5
|
+
|
|
6
|
+
require 'date'
|
|
7
|
+
require 'date/holiday'
|
|
8
|
+
|
|
9
|
+
class String
|
|
10
|
+
|
|
11
|
+
unless ''.respond_to?(:each_codepoint)
|
|
12
|
+
def awidth
|
|
13
|
+
aw = 0
|
|
14
|
+
unpack('U*').each do |c|
|
|
15
|
+
if c < 256
|
|
16
|
+
aw += 1
|
|
17
|
+
else
|
|
18
|
+
aw += 2
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
aw
|
|
22
|
+
end
|
|
23
|
+
else
|
|
24
|
+
def awidth
|
|
25
|
+
aw = 0
|
|
26
|
+
each_codepoint do |c|
|
|
27
|
+
if c < 256
|
|
28
|
+
aw += 1
|
|
29
|
+
else
|
|
30
|
+
aw += 2
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
aw
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
alias rjust_orig rjust
|
|
38
|
+
|
|
39
|
+
def rjust(w, pad=' ')
|
|
40
|
+
rjust_orig(w - (awidth - size), pad)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
alias center_orig center
|
|
44
|
+
|
|
45
|
+
def center(w, pad=' ')
|
|
46
|
+
center_orig(w - (awidth - size), pad)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class Cal
|
|
52
|
+
|
|
53
|
+
START =
|
|
54
|
+
{
|
|
55
|
+
'cn' => Date::GREGORIAN, # China
|
|
56
|
+
'de' => 2342032, # Germany (protestant states)
|
|
57
|
+
'dk' => 2342032, # Denmark
|
|
58
|
+
'es' => 2299161, # Spain
|
|
59
|
+
'fi' => 2361390, # Finland
|
|
60
|
+
'fr' => 2299227, # France
|
|
61
|
+
'gb' => 2361222, # United Kingdom
|
|
62
|
+
'gr' => 2423868, # Greece
|
|
63
|
+
'hu' => 2301004, # Hungary
|
|
64
|
+
'it' => 2299161, # Italy
|
|
65
|
+
'jp' => Date::GREGORIAN, # Japan
|
|
66
|
+
'no' => 2342032, # Norway
|
|
67
|
+
'pl' => 2299161, # Poland
|
|
68
|
+
'pt' => 2299161, # Portugal
|
|
69
|
+
'ru' => 2421639, # Russia
|
|
70
|
+
'se' => 2361390, # Sweden
|
|
71
|
+
'us' => 2361222, # United States
|
|
72
|
+
'os' => Date::JULIAN, # (old style)
|
|
73
|
+
'ns' => Date::GREGORIAN # (new style)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
DEFAULT_START = 'jp'
|
|
77
|
+
|
|
78
|
+
def initialize
|
|
79
|
+
opt_j; opt_m; opt_t; opt_y; opt_c; tty
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def opt_j(flag=false) @opt_j = flag end
|
|
83
|
+
def opt_m(flag=false) @opt_m = flag end
|
|
84
|
+
def opt_t(flag=false) @opt_t = flag end
|
|
85
|
+
def opt_y(flag=false) @opt_y = flag end
|
|
86
|
+
|
|
87
|
+
def opt_c(arg=DEFAULT_START) @start = START[arg] end
|
|
88
|
+
|
|
89
|
+
def tty(flag=false) @tty = flag end
|
|
90
|
+
|
|
91
|
+
def set_params
|
|
92
|
+
@dw = if @opt_j then 3 else 2 end
|
|
93
|
+
@mw = (@dw + 1) * 7 - 1
|
|
94
|
+
@mn = if @opt_j then 2 else 3 end
|
|
95
|
+
@tw = (@mw + 2) * @mn - 2
|
|
96
|
+
@k = if @opt_m then 1 else 0 end
|
|
97
|
+
@da = if @opt_j then :yday else :mday end
|
|
98
|
+
@es = @tty
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def pict(y, m)
|
|
102
|
+
d = (1..31).detect{|x| Date.valid_date?(y, m, x, @start)}
|
|
103
|
+
fi = Date.new(y, m, d, @start)
|
|
104
|
+
fi -= (fi.jd - @k + 1) % 7
|
|
105
|
+
|
|
106
|
+
ve = (fi..fi + 6).collect{|cu|
|
|
107
|
+
[ %w(日 月 火 水 木 金 土)[cu.wday],
|
|
108
|
+
[31, 0, 0, 0, 0, 0, 34][cu.wday] ]
|
|
109
|
+
}
|
|
110
|
+
ve += (fi..fi + 41).collect{|cu|
|
|
111
|
+
[ if cu.mon == m then cu.send(@da) end.to_s,
|
|
112
|
+
if cu.mon == m && cu.national_holiday? then 41
|
|
113
|
+
else [31, 0, 0, 0, 0, 0, 34][cu.wday] end ]
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
ve = ve.collect{|e, n| esc(e.rjust(@dw), n)}
|
|
117
|
+
|
|
118
|
+
gr = group(ve, 7)
|
|
119
|
+
gr = trans(gr) if @opt_t
|
|
120
|
+
ta = gr.collect{|xs| xs.join(' ')}
|
|
121
|
+
|
|
122
|
+
ca = %w(睦月 如月 弥生 卯月 皐月 水無月
|
|
123
|
+
文月 葉月 長月 神無月 霜月 師走)[m - 1]
|
|
124
|
+
ca = y.to_s + '年 ' + ca if !@opt_y
|
|
125
|
+
ca = esc(ca.center(@mw), 1)
|
|
126
|
+
|
|
127
|
+
ta.unshift(ca)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def esc2(n)
|
|
131
|
+
if @es then "\e[" + n.to_s + "m" else '' end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def esc(s, n)
|
|
135
|
+
esc2(n) + s + esc2(0)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def group(xs, n)
|
|
139
|
+
(0..xs.size / n - 1).collect{|i| xs[i * n, n]}
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def trans(xs)
|
|
143
|
+
(0..xs[0].size - 1).collect{|i| xs.collect{|x| x[i]}}
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def stack(xs)
|
|
147
|
+
if xs.empty? then [] else xs[0] + stack(xs[1..-1]) end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def block(xs, n)
|
|
151
|
+
stack(group(xs, n).collect{|ys| trans(ys).collect{|zs| zs.join(' ')}})
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def unlines(xs)
|
|
155
|
+
xs.collect{|x| x + "\n"}.join
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def monthly(y, m)
|
|
159
|
+
unlines(pict(y, m))
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def addmon(y, m, n)
|
|
163
|
+
y, m = (y * 12 + (m - 1) + n).divmod(12)
|
|
164
|
+
return y, m + 1
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def yearly(y)
|
|
168
|
+
esc((y.to_s + '年').center(@tw), 1) + "\n\n" +
|
|
169
|
+
unlines(block((0..11).collect{|n| pict(*addmon(y, 1, n))}, @mn)) + "\n"
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def print(y, m)
|
|
173
|
+
set_params
|
|
174
|
+
if @opt_y then yearly(y) else monthly(y, m) end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
if __FILE__ == $0
|
|
180
|
+
|
|
181
|
+
require 'getoptlong'
|
|
182
|
+
|
|
183
|
+
def usage
|
|
184
|
+
warn 'usage: ncal [-c iso3166] [-jmty] [[month] year]'
|
|
185
|
+
exit 1
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
cal = Cal.new
|
|
189
|
+
|
|
190
|
+
begin
|
|
191
|
+
GetoptLong.new(['-c', GetoptLong::REQUIRED_ARGUMENT],
|
|
192
|
+
['-j', GetoptLong::NO_ARGUMENT],
|
|
193
|
+
['-m', GetoptLong::NO_ARGUMENT],
|
|
194
|
+
['-t', GetoptLong::NO_ARGUMENT],
|
|
195
|
+
['-y', GetoptLong::NO_ARGUMENT]).
|
|
196
|
+
each do |opt, arg|
|
|
197
|
+
case opt
|
|
198
|
+
when '-c'; cal.opt_c(arg) || raise
|
|
199
|
+
when '-j'; cal.opt_j(true)
|
|
200
|
+
when '-m'; cal.opt_m(true)
|
|
201
|
+
when '-t'; cal.opt_t(true)
|
|
202
|
+
when '-y'; cal.opt_y(true)
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
rescue
|
|
206
|
+
usage
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
y, m = ARGV.values_at(1, 0).compact.collect{|x| x.to_i}
|
|
210
|
+
cal.opt_y(true) if y && !m
|
|
211
|
+
|
|
212
|
+
to = Date.today
|
|
213
|
+
y ||= to.year
|
|
214
|
+
m ||= to.mon
|
|
215
|
+
|
|
216
|
+
usage unless m >= 1 && m <= 12
|
|
217
|
+
usage unless y >= -4712
|
|
218
|
+
|
|
219
|
+
cal.tty($stdout.tty?)
|
|
220
|
+
|
|
221
|
+
print cal.print(y, m)
|
|
222
|
+
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
# See Bird & Wadler's Introduction to functional programming 4.5.
|
data/lib/date/holiday.rb
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# date/holiday.rb: Written by Tadayoshi Funaba 1998-2006,2014
|
|
2
|
+
# $Id: holiday.rb,v 2.17 2014-04-07 20:18:37+09 tadf Exp $
|
|
3
|
+
|
|
4
|
+
require 'date'
|
|
5
|
+
|
|
6
|
+
class Date
|
|
7
|
+
|
|
8
|
+
def fixed?
|
|
9
|
+
return false unless jd >= 2432753 # 1948-07-20/PooD
|
|
10
|
+
*x = mon, mday
|
|
11
|
+
(x == [ 1, 1]) || # --01-01
|
|
12
|
+
(x == [ 1, 15] && # --01-15 (1948-07-20/1999-12-31)
|
|
13
|
+
jd <= 2451544) ||
|
|
14
|
+
(x == [ 2, 11] && # --02-11 (1966-12-09/PooD)
|
|
15
|
+
jd >= 2439469) ||
|
|
16
|
+
(x == [ 4, 29]) || # --04-29
|
|
17
|
+
(x == [ 5, 3]) || # --05-03
|
|
18
|
+
(x == [ 5, 4] && # --05-04 (2007-01-01/PooD)
|
|
19
|
+
jd >= 2454102) ||
|
|
20
|
+
(x == [ 5, 5]) || # --05-05
|
|
21
|
+
(x == [ 7, 20] && # --07-20 (1996-01-01/2002-12-31)
|
|
22
|
+
jd >= 2450084 &&
|
|
23
|
+
jd <= 2452640) ||
|
|
24
|
+
(x == [ 9, 15] && # --09-15 (1966-06-25/2002-12-31)
|
|
25
|
+
jd >= 2439302 &&
|
|
26
|
+
jd <= 2452640) ||
|
|
27
|
+
(x == [10, 10] && # --10-10 (1966-06-25/1999-12-31)
|
|
28
|
+
jd >= 2439302 &&
|
|
29
|
+
jd <= 2451544) ||
|
|
30
|
+
(x == [11, 3]) || # --11-03
|
|
31
|
+
(x == [11, 23]) || # --11-23
|
|
32
|
+
(x == [12, 23] && # --12-23 (1989-02-17/PooD)
|
|
33
|
+
jd >= 2447575)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
t = Module.new do
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def find_fdom(y, m, sg)
|
|
41
|
+
1.upto(31) do |d|
|
|
42
|
+
if Date.valid_civil?(y, m, d, sg)
|
|
43
|
+
return Date.new(y, m, d, sg).jd
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def find_ldom(y, m, sg)
|
|
49
|
+
31.downto(1) do |d|
|
|
50
|
+
if Date.valid_civil?(y, m, d, sg)
|
|
51
|
+
return Date.new(y, m, d, sg).jd
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def nth_kday_to_jd(y, m, n, k, sg=GREGORIAN)
|
|
57
|
+
j = if n > 0
|
|
58
|
+
find_fdom(y, m, sg) - 1
|
|
59
|
+
else
|
|
60
|
+
find_ldom(y, m, sg) + 7
|
|
61
|
+
end
|
|
62
|
+
(j - (((j - k) + 1) % 7)) + 7 * n
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
extend t
|
|
68
|
+
include t
|
|
69
|
+
|
|
70
|
+
def nth_kday? (n, k)
|
|
71
|
+
k == wday && jd === nth_kday_to_jd(year, mon, n, k, start)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private :nth_kday?
|
|
75
|
+
|
|
76
|
+
def float?
|
|
77
|
+
(mon == 1 && nth_kday?(2, 1) && # 2nd Mon, Jan (2000-01-01/PooD)
|
|
78
|
+
jd >= 2451545) ||
|
|
79
|
+
(mon == 7 && nth_kday?(3, 1) && # 3nd Mon, Jul (2003-01-01/PooD)
|
|
80
|
+
jd >= 2452641) ||
|
|
81
|
+
(mon == 9 && nth_kday?(3, 1) && # 3nd Mon, Sep (2003-01-01/PooD)
|
|
82
|
+
jd >= 2452641) ||
|
|
83
|
+
(mon == 10 && nth_kday?(2, 1) && # 2nd Mon, Oct (2000-01-01/PooD)
|
|
84
|
+
jd >= 2451545)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
private :fixed?, :float?
|
|
88
|
+
|
|
89
|
+
def _deq(a, b, y)
|
|
90
|
+
(a + 0.242194 * (y - 1980) - ((y - b) / 4).to_i).to_i
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def _veq(y)
|
|
94
|
+
case y
|
|
95
|
+
when 1851..1899; a = 19.8277; b = 1983.0
|
|
96
|
+
when 1900..1979; a = 20.8357; b = 1983.0
|
|
97
|
+
when 1980..2099; a = 20.8431; b = 1980.0
|
|
98
|
+
when 2100..2150; a = 21.8510; b = 1980.0
|
|
99
|
+
else; raise ArgumentError, 'domain error'
|
|
100
|
+
end
|
|
101
|
+
Date.new(y, 3, _deq(a, b, y)).jd
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def _aeq(y)
|
|
105
|
+
case y
|
|
106
|
+
when 1851..1899; a = 22.2588; b = 1983.0
|
|
107
|
+
when 1900..1979; a = 23.2588; b = 1983.0
|
|
108
|
+
when 1980..2099; a = 23.2488; b = 1980.0
|
|
109
|
+
when 2100..2150; a = 24.2488; b = 1980.0
|
|
110
|
+
else; raise ArgumentError, 'domain error'
|
|
111
|
+
end
|
|
112
|
+
Date.new(y, 9, _deq(a, b, y)).jd
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
private :_deq, :_veq, :_aeq
|
|
116
|
+
|
|
117
|
+
def veq?
|
|
118
|
+
return false unless (2432753..2506696) === jd # 1948-07-20/2150-12-31
|
|
119
|
+
jd == _veq(year)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def aeq?
|
|
123
|
+
return false unless (2432753..2506696) === jd # 1948-07-20/2150-12-31
|
|
124
|
+
jd == _aeq(year)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
private :veq?, :aeq?
|
|
128
|
+
|
|
129
|
+
def nhol2? () fixed? || float? || veq? || aeq? end
|
|
130
|
+
|
|
131
|
+
unless Date.new.respond_to?(:sunday?)
|
|
132
|
+
def sunday? () wday == 0 end
|
|
133
|
+
def monday? () wday == 1 end
|
|
134
|
+
|
|
135
|
+
protected :sunday?, :monday?
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def need_subs?
|
|
139
|
+
nhol2? && (sunday? || (self - 1).need_subs?)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
protected :nhol2?, :need_subs?
|
|
143
|
+
|
|
144
|
+
def nhol32?
|
|
145
|
+
if jd >= 2441785
|
|
146
|
+
if jd <= 2454101 # 1973-04-12/2006-12-31
|
|
147
|
+
self.monday? && (self - 1).nhol2?
|
|
148
|
+
else # 2007-01-01/PooD
|
|
149
|
+
!nhol2? && (self - 1).need_subs?
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def nhol33?
|
|
155
|
+
if jd >= 2446427
|
|
156
|
+
if jd <= 2454101 # 1985-12-27/2006-12-31
|
|
157
|
+
!sunday? && !nhol32? &&
|
|
158
|
+
(self - 1).nhol2? && (self + 1).nhol2?
|
|
159
|
+
else # 2007-01-01/PooD
|
|
160
|
+
!nhol2? &&
|
|
161
|
+
(self - 1).nhol2? && (self + 1).nhol2?
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def nholx?
|
|
167
|
+
jd == 2436669 || # 1959-04-10 # 16
|
|
168
|
+
jd == 2447582 || # 1989-02-24
|
|
169
|
+
jd == 2448208 || # 1990-11-12
|
|
170
|
+
jd == 2449148 # 1993-06-09
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
private :nhol32?, :nhol33?, :nholx?
|
|
174
|
+
|
|
175
|
+
def national_holiday?
|
|
176
|
+
d = if julian? then self.gregorian else self end
|
|
177
|
+
d.instance_eval do nhol2? || nhol32? || nhol33? || nholx? end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def qfixed?
|
|
181
|
+
return false unless (2405163..2432752) === jd # 1873-01-04/1948-07-19
|
|
182
|
+
*x = mon, mday
|
|
183
|
+
(x == [ 1, 3] && (2405446..2432752) === jd) || # 1873-10-14/1948-07-19
|
|
184
|
+
(x == [ 1, 5] && (2405446..2432752) === jd) || # 1873-10-14/1948-07-19
|
|
185
|
+
(x == [ 1, 29] && (2405143..2405224) === jd) || # 1872-12-15/1873-03-06
|
|
186
|
+
(x == [ 1, 30] && (2405446..2419649) === jd) || # 1873-10-14/1912-09-03
|
|
187
|
+
(x == [ 2, 11] && (2405225..2432752) === jd) || # 1873-03-07/1948-07-19
|
|
188
|
+
(x == [ 4, 3] && (2405446..2432752) === jd) || # 1873-10-14/1948-07-19
|
|
189
|
+
(x == [ 4, 29] && (2424943..2432752) === jd) || # 1927-03-03/1948-07-19
|
|
190
|
+
(x == [ 7, 30] && (2419650..2424942) === jd) || # 1912-09-04/1927-03-02
|
|
191
|
+
(x == [ 8, 31] && (2419650..2424942) === jd) || # 1912-09-04/1927-03-02
|
|
192
|
+
(x == [ 9, 17] && (2405446..2407535) === jd) || # 1873-10-14/1879-07-04
|
|
193
|
+
(x == [10, 17] && (2407536..2432752) === jd) || # 1879-07-05/1948-07-19
|
|
194
|
+
(x == [10, 31] && (2419967..2424942) === jd) || # 1913-07-18/1927-03-02
|
|
195
|
+
(x == [11, 3] && (2405163..2419649) === jd) || # 1873-01-04/1912-09-03
|
|
196
|
+
(x == [11, 3] && (2424943..2432752) === jd) || # 1927-03-03/1948-07-19
|
|
197
|
+
(x == [11, 23] && (2405446..2432752) === jd) || # 1873-10-14/1948-07-19
|
|
198
|
+
(x == [12, 25] && (2424943..2432752) === jd) # 1927-03-03/1948-07-19
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
private :qfixed?
|
|
202
|
+
|
|
203
|
+
def qveq?
|
|
204
|
+
return false unless (2405163..2432752) === jd # 1873-01-04/1948-07-19
|
|
205
|
+
jd == _veq(year)
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def qaeq?
|
|
209
|
+
return false unless (2405163..2432752) === jd # 1873-01-04/1948-07-19
|
|
210
|
+
jd == _aeq(year)
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
private :qveq?, :qaeq?
|
|
214
|
+
|
|
215
|
+
def qnholx?
|
|
216
|
+
jd == 2420812 || # 1915-11-10 # 160
|
|
217
|
+
jd == 2420816 || # 1915-11-14 # 160
|
|
218
|
+
jd == 2420818 || # 1915-11-16 # 160
|
|
219
|
+
jd == 2425561 || # 1928-11-10 # 226
|
|
220
|
+
jd == 2425565 || # 1928-11-14 # 226
|
|
221
|
+
jd == 2425567 # 1928-11-16 # 226
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
private :qnholx?
|
|
225
|
+
|
|
226
|
+
def old_national_holiday?
|
|
227
|
+
d = if julian? then self.gregorian else self end
|
|
228
|
+
d.instance_eval do
|
|
229
|
+
qfixed? || qnholx? ||
|
|
230
|
+
((2407141..2432752) === jd && (qveq? || qaeq?)) # 1878-06-05/1948-07-19
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def self.julian_easter(y, sg=ITALY)
|
|
235
|
+
a = y % 4
|
|
236
|
+
b = y % 7
|
|
237
|
+
c = y % 19
|
|
238
|
+
d = (19 * c + 15) % 30
|
|
239
|
+
e = (2 * a + 4 * b - d + 34) % 7
|
|
240
|
+
f, g = (d + e + 114).divmod(31)
|
|
241
|
+
Date.new(y, f, g + 1, JULIAN).new_start(sg)
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def self.gregorian_easter(y, sg=ITALY)
|
|
245
|
+
a = y % 19
|
|
246
|
+
b, c = y.divmod(100)
|
|
247
|
+
d, e = b.divmod(4)
|
|
248
|
+
f = ((b + 8) / 25).to_i
|
|
249
|
+
g = ((b - f + 1) / 3).to_i
|
|
250
|
+
h = (19 * a + b - d - g + 15) % 30
|
|
251
|
+
i, k = c.divmod(4)
|
|
252
|
+
l = (32 + 2 * e + 2 * i - h - k) % 7
|
|
253
|
+
m = ((a + 11 * h + 22 * l) / 451).to_i
|
|
254
|
+
n, p = (h + l - 7 * m + 114).divmod(31)
|
|
255
|
+
Date.new(y, n, p + 1, GREGORIAN).new_start(sg)
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
class << self; alias_method :easter, :gregorian_easter end
|
|
259
|
+
|
|
260
|
+
def easter?
|
|
261
|
+
self ===
|
|
262
|
+
(if julian?
|
|
263
|
+
self.class.julian_easter(year)
|
|
264
|
+
else
|
|
265
|
+
self.class.gregorian_easter(year)
|
|
266
|
+
end)
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: date-holiday
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Tadayoshi Funaba
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2014-04-07 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description:
|
|
14
|
+
email: tadf@funaba.org
|
|
15
|
+
executables: []
|
|
16
|
+
extensions: []
|
|
17
|
+
extra_rdoc_files: []
|
|
18
|
+
files:
|
|
19
|
+
- LICENSE
|
|
20
|
+
- MANUAL
|
|
21
|
+
- MANUAL.en
|
|
22
|
+
- MANUAL.en.html
|
|
23
|
+
- MANUAL.en.rd
|
|
24
|
+
- MANUAL.html
|
|
25
|
+
- MANUAL.rd
|
|
26
|
+
- README
|
|
27
|
+
- README.en
|
|
28
|
+
- example/goodfriday.rb
|
|
29
|
+
- example/ncal.rb
|
|
30
|
+
- lib/date/holiday.rb
|
|
31
|
+
homepage: http://www.funaba.org/code
|
|
32
|
+
licenses:
|
|
33
|
+
- BSD 2-Clause
|
|
34
|
+
metadata: {}
|
|
35
|
+
post_install_message:
|
|
36
|
+
rdoc_options: []
|
|
37
|
+
require_paths:
|
|
38
|
+
- lib
|
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
40
|
+
requirements:
|
|
41
|
+
- - ">="
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '0'
|
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - ">="
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: '0'
|
|
49
|
+
requirements: []
|
|
50
|
+
rubyforge_project: tadf
|
|
51
|
+
rubygems_version: 2.2.2
|
|
52
|
+
signing_key:
|
|
53
|
+
specification_version: 4
|
|
54
|
+
summary: determination of holiday
|
|
55
|
+
test_files: []
|