when_exe 0.3.7 → 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|