when_exe 0.3.7 → 0.3.8
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 +210 -171
- data/bin/irb.rc +1 -0
- data/lib/when_exe.rb +78 -53
- data/lib/when_exe/basictypes.rb +27 -8
- data/lib/when_exe/calendarnote.rb +848 -805
- data/lib/when_exe/calendartypes.rb +110 -240
- data/lib/when_exe/coordinates.rb +2440 -2175
- data/lib/when_exe/core/compatibility.rb +1 -1
- data/lib/when_exe/core/duration.rb +13 -11
- data/lib/when_exe/core/extension.rb +38 -45
- data/lib/when_exe/ephemeris.rb +43 -14
- data/lib/when_exe/ephemeris/eclipse.rb +149 -0
- data/lib/when_exe/ephemeris/notes.rb +39 -7
- data/lib/when_exe/icalendar.rb +2 -6
- data/lib/when_exe/inspect.rb +1408 -1399
- data/lib/when_exe/parts/enumerator.rb +486 -477
- data/lib/when_exe/parts/resource.rb +1101 -1069
- data/lib/when_exe/parts/timezone.rb +6 -5
- data/lib/when_exe/region/babylonian.rb +405 -405
- data/lib/when_exe/region/bahai.rb +21 -61
- data/lib/when_exe/region/chinese/epochs.rb +81 -81
- data/lib/when_exe/region/chinese/twins.rb +51 -51
- data/lib/when_exe/region/christian.rb +7 -2
- data/lib/when_exe/region/coptic.rb +1 -1
- data/lib/when_exe/region/discordian.rb +9 -16
- data/lib/when_exe/region/french.rb +1 -1
- data/lib/when_exe/region/hanke_henry.rb +57 -0
- data/lib/when_exe/region/indian.rb +41 -73
- data/lib/when_exe/region/international_fixed.rb +97 -0
- data/lib/when_exe/region/iranian.rb +203 -203
- data/lib/when_exe/region/japanese.rb +13 -13
- data/lib/when_exe/region/japanese/eclipses.rb +1194 -0
- data/lib/when_exe/region/japanese/notes.rb +1482 -1383
- data/lib/when_exe/region/japanese/residues.rb +726 -721
- data/lib/when_exe/region/japanese/twins.rb +37 -37
- data/lib/when_exe/region/jewish.rb +2 -2
- data/lib/when_exe/region/pax.rb +60 -0
- data/lib/when_exe/region/positivist.rb +100 -0
- data/lib/when_exe/region/roman.rb +333 -334
- data/lib/when_exe/region/shire.rb +3 -20
- data/lib/when_exe/region/thai.rb +2 -2
- data/lib/when_exe/region/tibetan.rb +3 -3
- data/lib/when_exe/region/tranquility.rb +208 -0
- data/lib/when_exe/region/vanishing_leprechaun.rb +53 -0
- data/lib/when_exe/region/vietnamese.rb +4 -4
- data/lib/when_exe/region/world.rb +9 -13
- data/lib/when_exe/region/world_season.rb +89 -0
- data/lib/when_exe/region/zoroastrian.rb +4 -2
- data/lib/when_exe/tmobjects.rb +14 -4
- data/lib/when_exe/tmposition.rb +239 -81
- data/lib/when_exe/tmreference.rb +57 -28
- data/lib/when_exe/version.rb +1 -1
- data/link_to_online_documents +6 -3
- data/test/examples/today.rb +1 -1
- data/test/scripts.rb +23 -0
- data/test/scripts/2.ext.rb +169 -0
- data/test/scripts/2.rb +169 -0
- data/test/scripts/3.ext.rb +133 -0
- data/test/scripts/3.rb +134 -0
- data/test/scripts/4.ext.rb +112 -0
- data/test/scripts/4.min.rb +65 -0
- data/test/scripts/4.rb +136 -0
- data/test/scripts/5.ext.rb +78 -0
- data/test/scripts/5.rb +81 -0
- data/test/scripts/6.gcal.rb +131 -0
- data/test/scripts/6.rb +205 -0
- data/test/scripts/6.tz.rb +105 -0
- data/test/scripts/7.phase.rb +109 -0
- data/test/scripts/7.rb +95 -0
- data/test/scripts/7.term.rb +128 -0
- data/test/scripts/7.week.rb +84 -0
- data/test/scripts/8.ext.rb +61 -0
- data/test/scripts/8.rb +62 -0
- data/test/scripts/9.ext.rb +131 -0
- data/test/scripts/9.rb +130 -0
- data/test/scripts/chinese-luni-solar.rb +52 -0
- data/test/{examples → scripts}/geometric_complex.rb +41 -41
- data/test/scripts/geometric_complex.txt +18 -0
- data/test/scripts/korea.rb +59 -0
- data/test/scripts/thai-reviewed.txt +211 -0
- data/test/scripts/thai.rb +36 -0
- data/test/scripts/thai.txt +210 -0
- data/test/test.rb +7 -0
- data/test/test/basictypes.rb +22 -0
- data/test/test/coordinates.rb +2 -1
- data/test/test/ephemeris.rb +34 -2
- data/test/test/icalendar.rb +12 -0
- data/test/test/inspect.rb +37 -1
- data/test/test/parts.rb +4 -3
- data/test/test/region/armenian.rb +20 -0
- data/test/test/region/bahai.rb +58 -0
- data/test/test/region/chinese.rb +14 -3
- data/test/test/region/christian.rb +16 -35
- data/test/test/region/discordian.rb +20 -0
- data/test/test/region/indian.rb +30 -2
- data/test/test/region/japanese.rb +24 -0
- data/test/test/region/jewish.rb +2 -0
- data/test/test/region/m17n.rb +9 -0
- data/test/test/region/reforms.rb +121 -0
- data/test/test/region/residue.rb +17 -11
- data/test/test/region/shire.rb +58 -0
- data/test/test/region/swedish.rb +45 -0
- data/test/test/region/zoroastrian.rb +58 -0
- data/test/test/tmobjects.rb +74 -0
- data/test/test/tmposition.rb +468 -397
- data/when_exe.gemspec +2 -2
- metadata +49 -6
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2014 Takashi SUGA
|
|
4
|
+
|
|
5
|
+
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
|
6
|
+
=end
|
|
7
|
+
|
|
8
|
+
# Calendar/When/Ruby/2.APIの使用例/6.iCalendar/時間帯
|
|
9
|
+
|
|
10
|
+
# イベントが夏時間と標準時間の切り替えをまたがる場合の振舞
|
|
11
|
+
|
|
12
|
+
# →関連クラス図 [[Calendar/When/Ruby/3.クラス図/12.時間参照系]]
|
|
13
|
+
|
|
14
|
+
# *準備
|
|
15
|
+
# when_exe Ruby 版の When モジュールを include する
|
|
16
|
+
require 'when_exe'
|
|
17
|
+
include When
|
|
18
|
+
|
|
19
|
+
# *時間帯の指定に When::V::Timezone を使用する場合
|
|
20
|
+
# **.icsファイルで時間帯を定義
|
|
21
|
+
-- NewYork.ics -- (使用する場合は行頭の空白を削除)
|
|
22
|
+
BEGIN:VCALENDAR
|
|
23
|
+
VERSION:2.0
|
|
24
|
+
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
|
|
25
|
+
BEGIN:VTIMEZONE
|
|
26
|
+
TZID:America/New_York
|
|
27
|
+
LAST-MODIFIED:20050809T050000Z
|
|
28
|
+
BEGIN:STANDARD
|
|
29
|
+
DTSTART:19671029T020000
|
|
30
|
+
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
|
|
31
|
+
TZOFFSETFROM:-0400
|
|
32
|
+
TZOFFSETTO:-0500
|
|
33
|
+
TZNAME:EST
|
|
34
|
+
END:STANDARD
|
|
35
|
+
BEGIN:DAYLIGHT
|
|
36
|
+
DTSTART:19870405T020000
|
|
37
|
+
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
|
|
38
|
+
TZOFFSETFROM:-0500
|
|
39
|
+
TZOFFSETTO:-0400
|
|
40
|
+
TZNAME:EDT
|
|
41
|
+
END:DAYLIGHT
|
|
42
|
+
END:VTIMEZONE
|
|
43
|
+
END:VCALENDAR
|
|
44
|
+
----------------
|
|
45
|
+
|
|
46
|
+
vcal = Resource("NewYork.ics") # "NewYork.ics"をメモリに読み込む
|
|
47
|
+
p [vcal.class, vcal.iri] #=> [When::V::Calendar, "NewYork.ics"]
|
|
48
|
+
tz = vcal["America/New_York"]
|
|
49
|
+
p [tz.class, tz.iri] #=> [When::V::Timezone, "NewYork.ics::America/New_York"]
|
|
50
|
+
|
|
51
|
+
# ** 標準時間→夏時間
|
|
52
|
+
When::V::Event.new({
|
|
53
|
+
'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;BYHOUR=1,2,3,4;BYMINUTE=30;COUNT=4',
|
|
54
|
+
'dtstart' => 'TZID=America/New_York:19970406T013000'
|
|
55
|
+
}).each do |date|
|
|
56
|
+
p date #=> 1997-04-06T01:30:00-05:00, 1997-04-06T03:30:00-04:00, 1997-04-06T04:30:00-04:00, 1998-04-05T01:30:00-05:00
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# ** 夏時間→標準時間(重複する1時間内はスキップ)
|
|
60
|
+
When::V::Event.new({
|
|
61
|
+
'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;BYHOUR=1,2,3;BYMINUTE=30;COUNT=4',
|
|
62
|
+
'dtstart' => 'TZID=America/New_York:19971026T013000'
|
|
63
|
+
}).each do |date|
|
|
64
|
+
p date #=> 1997-10-26T01:30:00-04:00, 1997-10-26T02:30:00-05:00, 1997-10-26T03:30:00-05:00, 1998-10-25T01:30:00-04:00
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# ** 夏時間→標準時間(重複する1時間内のイベントも発生)
|
|
68
|
+
When::V::Event.new({
|
|
69
|
+
'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;BYHOUR=1,1=,2,3;BYMINUTE=30;COUNT=5',
|
|
70
|
+
'dtstart' => 'TZID=America/New_York:19971026T013000'
|
|
71
|
+
}).each do |date|
|
|
72
|
+
p date #=> 1997-10-26T01:30:00-04:00, 1997-10-26T01:30:00-05:00, 1997-10-26T02:30:00-05:00, 1997-10-26T03:30:00-05:00, 1998-10-25T01:30:00-04:00
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# BYHOUR=1,1=,2,3 の 1= は [[When.exe Standard Expression>http://www.asahi-net.or.jp/~dd6t-sg/when_rdoc/when.html#label-8]] の書式に準じている
|
|
76
|
+
|
|
77
|
+
# *時間帯の指定に TZInfo::Timezone を使用する場合
|
|
78
|
+
# メモリに America/Chicago に対応する When::V::Timezone が読み込まれていない場合、TZInfo::Timezoneを使用する
|
|
79
|
+
# ** 標準時間→夏時間
|
|
80
|
+
When::V::Event.new({
|
|
81
|
+
'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;BYHOUR=1,2,3,4;BYMINUTE=30;COUNT=4',
|
|
82
|
+
'dtstart' => 'TZID=America/Chicago:19970406T013000'
|
|
83
|
+
}).each do |date|
|
|
84
|
+
p date #=> 1997-04-06T01:30:00-06:00, 1997-04-06T03:30:00-05:00, 1997-04-06T04:30:00-05:00, 1998-04-05T01:30:00-06:00
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# ** 夏時間→標準時間(重複する1時間内はスキップ)
|
|
88
|
+
When::V::Event.new({
|
|
89
|
+
'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;BYHOUR=1,2,3;BYMINUTE=30;COUNT=4',
|
|
90
|
+
'dtstart' => 'TZID=America/Chicago:19971026T013000'
|
|
91
|
+
}).each do |date|
|
|
92
|
+
p date #=> 1997-10-26T01:30:00-05:00, 1997-10-26T02:30:00-06:00, 1997-10-26T03:30:00-06:00, 1998-10-25T01:30:00-05:00
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# ** 夏時間→標準時間(重複する1時間内のイベントも発生)
|
|
96
|
+
When::V::Event.new({
|
|
97
|
+
'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;BYHOUR=1,1=,2,3;BYMINUTE=30;COUNT=5',
|
|
98
|
+
'dtstart' => 'TZID=America/Chicago:19971026T013000'
|
|
99
|
+
}).each do |date|
|
|
100
|
+
p date #=> 1997-10-26T01:30:00-05:00, 1997-10-26T01:30:00-06:00, 1997-10-26T02:30:00-06:00, 1997-10-26T03:30:00-06:00, 1998-10-25T01:30:00-05:00
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# 制限 : BYHOUR=1= から生成した 1997-10-26T01:30:00-06:00 が保持する時間帯は -06:00 固定となり加減算しても変わらない。
|
|
104
|
+
|
|
105
|
+
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2014 Takashi SUGA
|
|
4
|
+
|
|
5
|
+
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
|
6
|
+
=end
|
|
7
|
+
|
|
8
|
+
# Calendar/When/Ruby/2.APIの使用例/7.暦注/月の位相
|
|
9
|
+
|
|
10
|
+
# *準備
|
|
11
|
+
# when_exe Ruby 版の When モジュールを include する
|
|
12
|
+
require 'date'
|
|
13
|
+
require 'when_exe'
|
|
14
|
+
include When
|
|
15
|
+
|
|
16
|
+
# *天体暦
|
|
17
|
+
|
|
18
|
+
# 標準時を日本時間にしておく
|
|
19
|
+
TM::Clock.local_time = '+09:00'
|
|
20
|
+
|
|
21
|
+
# ** 望の日付
|
|
22
|
+
# *** 天体暦用暦注リソースを明示的に使用
|
|
23
|
+
date = when?('2014-01-01') #=> 2014-01-01
|
|
24
|
+
p date.class #=> When::TM::CalDate
|
|
25
|
+
note = CalendarNote('LunarPhases')
|
|
26
|
+
p note.class #=> When::CalendarNote::LunarPhases
|
|
27
|
+
p note.phase(date, 15) #=> 2014-01-16 (2014-01-01の直後の望)
|
|
28
|
+
p note.phase(date, -15) #=> 2013-12-17 (2014-01-01の直前の望)
|
|
29
|
+
|
|
30
|
+
# *** 天体暦用暦注リソースを暗黙的に使用
|
|
31
|
+
date = when?('2014-01-01') #=> 2014-01-01
|
|
32
|
+
p date.class #=> When::TM::CalDate
|
|
33
|
+
p date.frame.class #=> When::CalendarTypes::Gregorian
|
|
34
|
+
p date.frame.note.class #=> When::CalendarNote::Christian
|
|
35
|
+
p date.phase(15) #=> 2014-01-16 (2014-01-01の直後の望)
|
|
36
|
+
p date.phase(-15) #=> 2013-12-17 (2014-01-01の直前の望)
|
|
37
|
+
|
|
38
|
+
# &yard(When::CalendarNote::Christian,2)には phase メソッドがないため、代替して&yard(When::CalendarNote::LunarPhases,2)が使用される
|
|
39
|
+
|
|
40
|
+
# ** 朔の時刻
|
|
41
|
+
# *** 天体暦用暦注リソースを明示的に使用
|
|
42
|
+
time = when?('2014-01-01T00:00') #=> 2014-01-01T00:00+09:00
|
|
43
|
+
p time.class #=> When::TM::DateAndTime
|
|
44
|
+
note = CalendarNote('LunarPhases')
|
|
45
|
+
p note.class #=> When::CalendarNote::LunarPhases
|
|
46
|
+
p note.phase(time) #=> 2014-01-01T20:14+09:00 (2014-01-01の直後の朔, time と同じ分解能)
|
|
47
|
+
p note.phase(time, -30) #=> 2013-12-03T09:22+09:00 (2014-01-01の直前の朔, time と同じ分解能)
|
|
48
|
+
|
|
49
|
+
# *** 天体暦用暦注リソースを暗黙的に使用
|
|
50
|
+
time = when?('2014-01-01T00:00') #=> 2014-01-01T00:00+09:00
|
|
51
|
+
p time.class #=> When::TM::DateAndTime
|
|
52
|
+
p time.frame.class #=> When::CalendarTypes::Gregorian
|
|
53
|
+
p time.frame.note.class #=> When::CalendarNote::Christian
|
|
54
|
+
p time.phase #=> 2014-01-01T20:14+09:00 (2014-01-01の直後の朔, time と同じ分解能)
|
|
55
|
+
p time.phase(-30) #=> 2013-12-03T09:22+09:00 (2014-01-01の直前の朔, time と同じ分解能)
|
|
56
|
+
|
|
57
|
+
# phase メソッドの引数 0(=月の位相 0 ティティ)は省略できる
|
|
58
|
+
|
|
59
|
+
# ** 朔の日付時刻(標準の日付時刻クラスを使用)
|
|
60
|
+
# *** 天体暦用暦注リソースを明示的に使用
|
|
61
|
+
date = Date.new(2014,1,1) #=> #<Date: 2014-01-01 (4913317/2,0,2299161)>
|
|
62
|
+
time = DateTime.new(2014,1,1) #=> #<DateTime: 2014-01-01T00:00:00+00:00 (4913317/2,0,2299161)>
|
|
63
|
+
note = CalendarNote('LunarPhases')
|
|
64
|
+
p note.class #=> When::CalendarNote::LunarPhases
|
|
65
|
+
p note.phase(date) #=> 2014-01-31
|
|
66
|
+
p note.phase(time) #=> 2014-01-01T11:14:09.85Z
|
|
67
|
+
|
|
68
|
+
# UTC の正午は朔の後のため、直後の朔は1月31日になる
|
|
69
|
+
|
|
70
|
+
# *** 天体暦用暦注リソースを暗黙的に使用
|
|
71
|
+
require 'when_exe/core/extension'
|
|
72
|
+
date = Date.new(2014,1,1) #=> #<Date: 2014-01-01 (4913317/2,0,2299161)>
|
|
73
|
+
time = DateTime.new(2014,1,1) #=> #<DateTime: 2014-01-01T00:00:00+00:00 (4913317/2,0,2299161)>
|
|
74
|
+
p date.phase #=> #<Date: 2014-01-31 (4913377/2,0,2299161)>
|
|
75
|
+
p time.phase #=> #<DateTime: 2014-01-01T11:14:09+00:00 (70751778283/28800,0/1,2299161)>
|
|
76
|
+
|
|
77
|
+
# *宣明暦
|
|
78
|
+
|
|
79
|
+
# 標準時を未定義にしておく
|
|
80
|
+
TM::Clock.local_time = nil
|
|
81
|
+
|
|
82
|
+
# ** 望の日付
|
|
83
|
+
date = when?('康和3.2.1') #=> 康和03(1101).02.01
|
|
84
|
+
p date.class #=> When::TM::CalDate
|
|
85
|
+
p date.frame.note.class #=> When::CalendarNote::JapaneseNote
|
|
86
|
+
p date.phase(15) #=> 康和03(1101).02.16
|
|
87
|
+
p date.phase(-15) #=> 康和03(1101).01.16=
|
|
88
|
+
|
|
89
|
+
# &yard(When::CalendarNote::JapaneseNote,2)の phase メソッドが使われ、当時行用されていた宣明暦で計算が行われる
|
|
90
|
+
|
|
91
|
+
# 宣明暦での康和3年正月望は康和03(1101).01.16の翌朝の日の出前であるため = が付く
|
|
92
|
+
|
|
93
|
+
# (= は<When.exe Standard Representation ([[Calendar/When/Ruby/2.APIの使用例/1.前提となる概念/1.日付時刻の表現]])> で翌日を意味する)
|
|
94
|
+
|
|
95
|
+
# ** 月の位相の日付一覧
|
|
96
|
+
[0, 7.5, 15, 22.5, 30].each do |phase|
|
|
97
|
+
date = when?('康和3.2.1T00:00').phase(phase)
|
|
98
|
+
p date #=> 下記
|
|
99
|
+
# 康和03(1101).02.01T04:33Z
|
|
100
|
+
# 康和03(1101).02.08=T03:27Z
|
|
101
|
+
# 康和03(1101).02.16T14:41Z
|
|
102
|
+
# 康和03(1101).02.23T09:36Z
|
|
103
|
+
# 康和03(1101).03.01*T19:36Z
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
# 宣明暦での康和3年3月朔は進朔しており実際は前日であるため * が付く
|
|
108
|
+
|
|
109
|
+
# (* は<When.exe Standard Representation ([[Calendar/When/Ruby/2.APIの使用例/1.前提となる概念/1.日付時刻の表現]])> で前日を意味する)
|
data/test/scripts/7.rb
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2014 Takashi SUGA
|
|
4
|
+
|
|
5
|
+
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
|
6
|
+
=end
|
|
7
|
+
|
|
8
|
+
# Calendar/When/Ruby/2.APIの使用例/7.暦注
|
|
9
|
+
|
|
10
|
+
# →関連クラス図 [[Calendar/When/Ruby/3.クラス図/03.CalendarTypes]]
|
|
11
|
+
|
|
12
|
+
# *準備
|
|
13
|
+
# when_exe Ruby 版の When モジュールを include する
|
|
14
|
+
require 'when_exe'
|
|
15
|
+
include When
|
|
16
|
+
|
|
17
|
+
# 七曜表の扱いなどについては[[Calendar/When/Ruby/2.APIの使用例/7.暦注/七曜]]を参照
|
|
18
|
+
|
|
19
|
+
# *復活祭
|
|
20
|
+
# ** グレゴリオ暦
|
|
21
|
+
gdate = CalendarNote('Christian').easter(when?('2013'))
|
|
22
|
+
p [gdate, gdate.frame.class] #=> [2013-03-31, When::CalendarTypes::Gregorian]
|
|
23
|
+
gdate = when?('2013').easter
|
|
24
|
+
p [gdate, gdate.frame.class] #=> [2013-03-31, When::CalendarTypes::Gregorian]
|
|
25
|
+
p gdate.events #=> ["easter"]
|
|
26
|
+
p gdate.to_h(:method=>:to_m17n) #=> 下記
|
|
27
|
+
# {:frame=>"http://hosi.org/When/CalendarTypes/Gregorian",
|
|
28
|
+
# :precision=>0,
|
|
29
|
+
# :events=>["easter"],
|
|
30
|
+
# :sdn=>2456383,
|
|
31
|
+
# :calendar=>["http://hosi.org/When/CalendarTypes/Gregorian"],
|
|
32
|
+
# :notes=>[[{:note=>"Month", :value=>"March"}], []],
|
|
33
|
+
# :cal_date=>[2013, 3, 31]}
|
|
34
|
+
p CalendarNote('Christian').include?(gdate, 'easter') #=> true
|
|
35
|
+
p gdate.is?('easter') #=> true
|
|
36
|
+
p CalendarNote('Christian').include?(Calendar('Julian') ^ gdate, 'easter') #=> false
|
|
37
|
+
p (Calendar('Julian') ^ gdate).is?('easter') #=> false
|
|
38
|
+
|
|
39
|
+
# ** ユリウス暦
|
|
40
|
+
jdate = CalendarNote('Christian').easter(when?('2013^^Julian'))
|
|
41
|
+
p [jdate, jdate.frame.class, Calendar('Gregorian') ^ jdate] #=> [2013-04-22, When::CalendarTypes::Julian, 2013-05-05]
|
|
42
|
+
jdate = when?('2013^^Julian').easter
|
|
43
|
+
p [jdate, jdate.frame.class, Calendar('Gregorian') ^ jdate] #=> [2013-04-22, When::CalendarTypes::Julian, 2013-05-05]
|
|
44
|
+
p jdate.events #=> ["easter"]
|
|
45
|
+
p CalendarNote('Christian').include?(jdate, 'easter') #=> true
|
|
46
|
+
p jdate.is?('easter') #=> true
|
|
47
|
+
p CalendarNote('Christian').include?(Calendar('Gregorian') ^ jdate, 'easter') #=> false
|
|
48
|
+
p (Calendar('Gregorian') ^ jdate).is?('easter') #=> false
|
|
49
|
+
|
|
50
|
+
# *秋分の日
|
|
51
|
+
# **デフォルト暦注
|
|
52
|
+
date = when?('H25.9.23')
|
|
53
|
+
p date #=> H25(2013).09.23
|
|
54
|
+
p date.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian?note=DefaultNotes"
|
|
55
|
+
p date.notes #=>[[{:note=>"Month", :value=>"September"}], []]
|
|
56
|
+
|
|
57
|
+
# &yard(When::TM::CalendarEra,1)('&yard(ModernJapanese)')は日本暦注を読み込まない
|
|
58
|
+
|
|
59
|
+
# **日本暦注
|
|
60
|
+
date = when?('平成25.9.23') # ここで日本暦日をメモリに展開するため、少々時間がかかる
|
|
61
|
+
p date #=> 平成25(2013).09.23
|
|
62
|
+
p date.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian?note=JapaneseNote"
|
|
63
|
+
p date.notes #=> 下記
|
|
64
|
+
# [[{:note=>"干支", :value=>"癸巳(29)", :position=>"共通"}],
|
|
65
|
+
# [{:note=>"月名", :value=>"September", :position=>"月建"}],
|
|
66
|
+
# [{:note=>"干支", :value=>"壬辰(28)", :position=>"共通"},
|
|
67
|
+
# {:note=>"六曜", :value=>"友引", :position=>"民間"},
|
|
68
|
+
# {:note=>"廿四節気", :value=>"秋分(180)", :position=>"時候"},
|
|
69
|
+
# {:note=>"祝祭日", :value=>"秋分の日", :position=>"祝祭日"}]]
|
|
70
|
+
p date.notes("祝祭日") #=> {:note=>"祝祭日", :value=>"秋分の日", :position=>"祝祭日"}
|
|
71
|
+
p date.is?({:note=>"祝祭日", :value=>"秋分の日"}) #=> true
|
|
72
|
+
p date.is?("祝祭日") #=> true
|
|
73
|
+
p date.is?("秋分の日") #=> true
|
|
74
|
+
|
|
75
|
+
# *応永年間
|
|
76
|
+
# **すべての日本暦注
|
|
77
|
+
date = when?('応永25.9.23')
|
|
78
|
+
p date #=> 応永25(1418).09.23
|
|
79
|
+
p date.notes({:notes=>:all, :locale=>'ja.UTF-8'}) #=> 省略 (全暦注出力)
|
|
80
|
+
|
|
81
|
+
# *ヒンドゥー暦
|
|
82
|
+
# **パンチャンガ
|
|
83
|
+
date = Calendar('HinduLuniSolar?note=HinduNote') ^ when?('2013-5-28', :clock=>'+05:30')
|
|
84
|
+
p date #=> 1935-02<04-T+05:30
|
|
85
|
+
p date.notes({:locale=>'ja.UTF-8'}) #=> 下記
|
|
86
|
+
# [[],
|
|
87
|
+
# [{:note=>"Month",
|
|
88
|
+
# :value=>"Vaiśākha Kṛṣṇapakṣa"}],
|
|
89
|
+
# [{:note=>"tithi", :value=>["Chaturthi(00:42:49)"]},
|
|
90
|
+
# {:note=>"vara", :value=>["Maṅgala(05:48:00)"]},
|
|
91
|
+
# {:note=>"naksatra", :value=>["U. āṣāḍha(16:47:13)"]},
|
|
92
|
+
# {:note=>"yoga", :value=>["ukla(11:57:35)"]},
|
|
93
|
+
# {:note=>"karana", :value=>["Bālava(13:54:42)", "Kaulava(00:42:49)"]}]]
|
|
94
|
+
|
|
95
|
+
# それぞれの要素の値が上記になる時刻を時間帯+05:30で表記
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2014 Takashi SUGA
|
|
4
|
+
|
|
5
|
+
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
|
6
|
+
=end
|
|
7
|
+
|
|
8
|
+
# Calendar/When/Ruby/2.APIの使用例/7.暦注/二十四節気
|
|
9
|
+
|
|
10
|
+
# *準備
|
|
11
|
+
# when_exe Ruby 版の When モジュールを include する
|
|
12
|
+
require 'when_exe'
|
|
13
|
+
include When
|
|
14
|
+
|
|
15
|
+
# *天体暦
|
|
16
|
+
|
|
17
|
+
# 標準時を日本時間にしておく
|
|
18
|
+
TM::Clock.local_time = '+09:00'
|
|
19
|
+
|
|
20
|
+
# ** 冬至の日付
|
|
21
|
+
# *** 天体暦用暦注リソースを明示的に使用
|
|
22
|
+
date = when?('2014-01-01') #=> 2014-01-01
|
|
23
|
+
p date.class #=> When::TM::CalDate
|
|
24
|
+
note = CalendarNote('SolarTerms')
|
|
25
|
+
p note.class #=> When::CalendarNote::SolarTerms
|
|
26
|
+
p note.term(date, 270) #=> 2014-12-22 (2014-01-01の直後の冬至)
|
|
27
|
+
p note.term(date, -90) #=> 2013-12-22 (2014-01-01の直前の冬至)
|
|
28
|
+
|
|
29
|
+
# *** 天体暦用暦注リソースを暗黙的に使用
|
|
30
|
+
date = when?('2014-01-01') #=> 2014-01-01
|
|
31
|
+
p date.class #=> When::TM::CalDate
|
|
32
|
+
p date.frame.class #=> When::CalendarTypes::Gregorian
|
|
33
|
+
p date.frame.note.class #=> When::CalendarNote::Christian
|
|
34
|
+
p date.term(270) #=> 2014-12-22 (2014-01-01の直後の冬至)
|
|
35
|
+
p date.term(-90) #=> 2013-12-22 (2014-01-01の直前の冬至)
|
|
36
|
+
|
|
37
|
+
# &yard(When::CalendarNote::Christian,2)には term メソッドがないため、代替して&yard(When::CalendarNote::SolarTerms,2)が使用される
|
|
38
|
+
|
|
39
|
+
# ** 春分の時刻
|
|
40
|
+
# *** 天体暦用暦注リソースを明示的に使用
|
|
41
|
+
time = when?('2014-01-01T00:00') #=> 2014-01-01T00:00+09:00
|
|
42
|
+
p time.class #=> When::TM::DateAndTime
|
|
43
|
+
note = CalendarNote('SolarTerms')
|
|
44
|
+
p note.class #=> When::CalendarNote::SolarTerms
|
|
45
|
+
p note.term(time) #=> 2014-03-21T01:56+09:00 (2014-01-01の直後の春分, time と同じ分解能)
|
|
46
|
+
p note.term(time, -360) #=> 2013-03-20T20:02+09:00 (2014-01-01の直前の春分, time と同じ分解能)
|
|
47
|
+
|
|
48
|
+
# *** 天体暦用暦注リソースを暗黙的に使用
|
|
49
|
+
time = when?('2014-01-01T00:00') #=> 2014-01-01T00:00+09:00
|
|
50
|
+
p time.class #=> When::TM::DateAndTime
|
|
51
|
+
p time.frame.class #=> When::CalendarTypes::Gregorian
|
|
52
|
+
p time.frame.note.class #=> When::CalendarNote::Christian
|
|
53
|
+
p time.term #=> 2014-03-21T01:56+09:00 (2014-01-01の直後の春分, time と同じ分解能)
|
|
54
|
+
p time.term(-360) #=> 2013-03-20T20:02+09:00 (2014-01-01の直前の春分, time と同じ分解能)
|
|
55
|
+
|
|
56
|
+
# term メソッドの引数 0(=太陽黄経 0 度)は省略できる
|
|
57
|
+
|
|
58
|
+
# ** 春分の日付時刻(標準の日付時刻クラスを使用)
|
|
59
|
+
# *** 天体暦用暦注リソースを明示的に使用
|
|
60
|
+
require 'date'
|
|
61
|
+
date = Date.new(2014,1,1) #=> #<Date: 2014-01-01 (4913317/2,0,2299161)>
|
|
62
|
+
time = DateTime.new(2014,1,1) #=> #<DateTime: 2014-01-01T00:00:00+00:00 (4913317/2,0,2299161)>
|
|
63
|
+
note = CalendarNote('SolarTerms')
|
|
64
|
+
p note.class #=> When::CalendarNote::SolarTerms
|
|
65
|
+
p note.term(date) #=> 2014-03-21
|
|
66
|
+
p note.term(time) #=> 2014-03-20T16:56:55.09Z
|
|
67
|
+
|
|
68
|
+
# *** 天体暦用暦注リソースを暗黙的に使用
|
|
69
|
+
require 'when_exe/core/extension'
|
|
70
|
+
date = Date.new(2014,1,1) #=> #<Date: 2014-01-01 (4913317/2,0,2299161)>
|
|
71
|
+
time = DateTime.new(2014,1,1) #=> #<DateTime: 2014-01-01T00:00:00+00:00 (4913317/2,0,2299161)>
|
|
72
|
+
p date.term #=> #<Date: 2014-03-21 (4913475/2,0,2299161)>
|
|
73
|
+
p time.term #=> #<DateTime: 2014-03-20T16:56:55+00:00 (42452418923/17280,0/1,2299161)>
|
|
74
|
+
|
|
75
|
+
# *宣明暦
|
|
76
|
+
|
|
77
|
+
# 冬至の日付を移動して朔旦冬至にした建仁2~3年を例にする
|
|
78
|
+
|
|
79
|
+
# 標準時を未定義にしておく
|
|
80
|
+
TM::Clock.local_time = nil
|
|
81
|
+
|
|
82
|
+
# ** 冬至の日付
|
|
83
|
+
date = when?('建仁03.01.01') #=> 建仁03(1203).01.01
|
|
84
|
+
p date.class #=> When::TM::CalDate
|
|
85
|
+
p date.frame.note.class #=> When::CalendarNote::JapaneseNote
|
|
86
|
+
p date.term(270) #=> 建仁03(1203).11.12
|
|
87
|
+
p date.term(-90) #=> 建仁02(1202).11.01*
|
|
88
|
+
|
|
89
|
+
# &yard(When::CalendarNote::JapaneseNote,2)の term メソッドが使われ、当時行用されていた宣明暦で計算が行われる
|
|
90
|
+
|
|
91
|
+
# 宣明暦での建仁2年の冬至は建仁02(1202).11.01の前日であるため * が付く
|
|
92
|
+
|
|
93
|
+
# (* は<When.exe Standard Representation ([[Calendar/When/Ruby/2.APIの使用例/1.前提となる概念/1.日付時刻の表現]])> で前日を意味する)
|
|
94
|
+
|
|
95
|
+
# ** 二十四節気の日付一覧
|
|
96
|
+
date = when?('建仁02.01.01') #=> 建仁02(1202).01.01
|
|
97
|
+
25.times do |t|
|
|
98
|
+
# [0,15] は「太陽黄経を15で割って0余る」という指定
|
|
99
|
+
date = date.ceil.term([0,15])
|
|
100
|
+
p date #=> 下記
|
|
101
|
+
# 建仁02(1202).01.05
|
|
102
|
+
# 建仁02(1202).01.20
|
|
103
|
+
# 建仁02(1202).02.06
|
|
104
|
+
# 建仁02(1202).02.22
|
|
105
|
+
# 建仁02(1202).03.07
|
|
106
|
+
# 建仁02(1202).03.22
|
|
107
|
+
# 建仁02(1202).04.08
|
|
108
|
+
# 建仁02(1202).04.23
|
|
109
|
+
# 建仁02(1202).05.10
|
|
110
|
+
# 建仁02(1202).05.25
|
|
111
|
+
# 建仁02(1202).06.10
|
|
112
|
+
# 建仁02(1202).06.25
|
|
113
|
+
# 建仁02(1202).07.12
|
|
114
|
+
# 建仁02(1202).07.27
|
|
115
|
+
# 建仁02(1202).08.13
|
|
116
|
+
# 建仁02(1202).08.28
|
|
117
|
+
# 建仁02(1202).09.13
|
|
118
|
+
# 建仁02(1202).09.29
|
|
119
|
+
# 建仁02(1202).10.14
|
|
120
|
+
# 建仁02(1202).10.29
|
|
121
|
+
# 建仁02(1202).10=14
|
|
122
|
+
# 建仁02(1202).11.01*
|
|
123
|
+
# 建仁02(1202).11.16
|
|
124
|
+
# 建仁02(1202).12.01
|
|
125
|
+
# 建仁02(1202).12.16
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# &yard(When::TM::CalDate,2)オブジェクトはその日付の正午に丸められるため ceil メソッドで日付をすすめる必要がある
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2014 Takashi SUGA
|
|
4
|
+
|
|
5
|
+
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
|
6
|
+
=end
|
|
7
|
+
|
|
8
|
+
# Calendar/When/Ruby/2.APIの使用例/7.暦注/七曜
|
|
9
|
+
|
|
10
|
+
# *準備
|
|
11
|
+
# when_exe Ruby 版の When モジュールを include する
|
|
12
|
+
require 'pp'
|
|
13
|
+
require 'when_exe'
|
|
14
|
+
require 'when_exe/mini_application'
|
|
15
|
+
include When
|
|
16
|
+
|
|
17
|
+
# *グレゴリオ暦
|
|
18
|
+
# ** 週
|
|
19
|
+
date = when?('2013-12-30')
|
|
20
|
+
p date.week_included #=> 2013-12-30...2014-01-06 (月曜始まり)
|
|
21
|
+
p date.week_included('Mon') #=> 2013-12-30...2014-01-06 (月曜始まり)
|
|
22
|
+
p date.week_included('Sun') #=> 2013-12-29...2014-01-05 (日曜始まり)
|
|
23
|
+
|
|
24
|
+
# ** 月
|
|
25
|
+
date = when?('2013-12-30')
|
|
26
|
+
p date.month_included #=> 2013-12-01...2014-01-01
|
|
27
|
+
p date.month_included.map {|date| date[DAY]} #=> [1,2, (snip), 31]
|
|
28
|
+
pp date.month_included('Sun') { |date, type|
|
|
29
|
+
case type #=> [["December 2013",
|
|
30
|
+
when YEAR ; date.strftime("%Y") # ["*", 1, 2, 3, 4, 5, 6, 7],
|
|
31
|
+
when MONTH ; date.strftime("%B %Y") # ["*", 8, 9, 10, 11, 12, 13, 14],
|
|
32
|
+
when WEEK ; '*' # ["*", 15, 16, 17, 18, 19, 20, 21],
|
|
33
|
+
when DAY ; date[DAY] # ["*", 22, 23, 24, 25, 26, 27, 28],
|
|
34
|
+
else ; '-' # ["*", 29, 30, 31,"-","-","-","-"]]]
|
|
35
|
+
end #
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
# ** 年
|
|
39
|
+
date = when?('2013-12-30')
|
|
40
|
+
p date.year_included #=> 2013-01-01...2014-01-01
|
|
41
|
+
pp date.year_included('Sun') { |date, type| #=> (省略)
|
|
42
|
+
When.column(date, type)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# *世界暦
|
|
46
|
+
# ** 週
|
|
47
|
+
date = when?('2013-12-30^^World')
|
|
48
|
+
p date.week_included #=> 2013-12-30...2014-01-06 (月曜始まり)
|
|
49
|
+
p date.week_included('Mon') #=> 2013-12-30...2014-01-06 (月曜始まり)
|
|
50
|
+
p date.week_included('Sun') #=> 2013-12-29...2014-01-05 (日曜始まり)
|
|
51
|
+
p date.week_included('WorldWeek') #=> 2013-12-24...2014-01-01 (日曜始まりの8日間)
|
|
52
|
+
|
|
53
|
+
# &yard(When::CalendarTypes::CalendarNote,1)('&yard(WorldWeek)')を使うと、専用の固定曜日を使用
|
|
54
|
+
|
|
55
|
+
# ** 月
|
|
56
|
+
date = when?('2013-12-30^^World')
|
|
57
|
+
pp date.month_included('Sun') {|date, type|
|
|
58
|
+
case type #=> [["December 2013",
|
|
59
|
+
when YEAR ; date.strftime("%Y") # ["*", 1, 2, 3, 4, 5, 6, 7],
|
|
60
|
+
when MONTH ; date.strftime("%B %Y") # ["*", 8, 9, 10, 11, 12, 13, 14],
|
|
61
|
+
when WEEK ; '*' # ["*", 15, 16, 17, 18, 19, 20, 21],
|
|
62
|
+
when DAY ; date[DAY] # ["*", 22, 23, 24, 25, 26, 27, 28],
|
|
63
|
+
else ; '-' # ["*", 29, 30, 31,"-","-","-","-"]]]
|
|
64
|
+
end #
|
|
65
|
+
}
|
|
66
|
+
pp date.month_included('WorldWeek') {|date, type|
|
|
67
|
+
case type #=> [["December 2013",
|
|
68
|
+
when YEAR ; date.strftime("%Y") # ["*","-","-","-","-","-", 1, 2],
|
|
69
|
+
when MONTH ; date.strftime("%B %Y") # ["*", 3, 4, 5, 6, 7, 8, 9],
|
|
70
|
+
when WEEK ; '*' # ["*", 10, 11, 12, 13, 14, 15, 16],
|
|
71
|
+
when DAY ; date[DAY] # ["*", 17, 18, 19, 20, 21, 22, 23],
|
|
72
|
+
else ; '-' # ["*", 24, 25, 26, 27, 28, 29, 30, 31]]]
|
|
73
|
+
end # 31日は七曜外
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
# &yard(CalendarNote)('&yard(WorldWeek)')を使うと、専用の固定曜日を使用
|
|
77
|
+
|
|
78
|
+
# ** 年
|
|
79
|
+
date = when?('2013-12-30^^World')
|
|
80
|
+
p date.year_included #=> 2013-01-01...2014-01-01
|
|
81
|
+
pp date.year_included('Sun') {|date, type| #=> (省略)
|
|
82
|
+
When.column(date, type)
|
|
83
|
+
}
|
|
84
|
+
|