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,61 @@
|
|
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の使用例/8.多言語対応文字列/コア拡張
|
9
|
+
|
10
|
+
# コアクラスを require 'when_exe/core/extension' で拡張した場合の記法を確認
|
11
|
+
|
12
|
+
# *準備
|
13
|
+
require 'when_exe'
|
14
|
+
require 'when_exe/core/extension'
|
15
|
+
include When
|
16
|
+
|
17
|
+
# * グレゴリオ暦
|
18
|
+
gregorian = 'Christian::Gregorian'.m17n # .to_m17n は別機能(単純に文字列をStringクラスから When::BasicTypes::M17n クラスに変更)
|
19
|
+
p gregorian.iri #=> "http://hosi.org/When/BasicTypes/M17n/Christian::Gregorian"
|
20
|
+
p gregorian.translate('ja') #=> "グレゴリオ暦"
|
21
|
+
p gregorian.translate('en') #=> "Gregorian"
|
22
|
+
p gregorian.translate('fr') #=> "Gregorian" (未定義でデフォルト使用)
|
23
|
+
p gregorian/'ja' #=> "グレゴリオ暦"
|
24
|
+
p gregorian/'en' #=> "Gregorian"
|
25
|
+
p gregorian/'fr' #=> "Gregorian" (未定義でデフォルト使用)
|
26
|
+
p gregorian.reference('ja') #=> "http://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AC%E3%82%B4%E3%83%AA%E3%82%AA%E6%9A%A6"
|
27
|
+
p gregorian.reference('en') #=> "http://en.wikipedia.org/wiki/Gregorian_calendar"
|
28
|
+
p gregorian.reference('fr') #=> "http://en.wikipedia.org/wiki/Gregorian_calendar" (未定義でデフォルト使用)
|
29
|
+
p 'Gregorian'.calendar.label.iri #=> "http://hosi.org/When/BasicTypes/M17n/Christian::Gregorian" (同じIRIのオブジェクト)
|
30
|
+
|
31
|
+
# * 一月
|
32
|
+
january = 'Jan'.month_name
|
33
|
+
p january.iri #=> "http://hosi.org/When/BasicTypes/M17n/Calendar::Month::January"
|
34
|
+
p january.translate('ja') #=> "1月"
|
35
|
+
p january.translate('en') #=> "January"
|
36
|
+
p january.translate('fr') #=> "janvier"
|
37
|
+
p january/'ja' #=> "1月"
|
38
|
+
p january/'en' #=> "January"
|
39
|
+
p january/'fr' #=> "janvier"
|
40
|
+
p january.reference('ja') #=> "http://ja.wikipedia.org/wiki/1%E6%9C%88"
|
41
|
+
p january.reference('en') #=> "http://en.wikipedia.org/wiki/January"
|
42
|
+
p january.reference('fr') #=> "http://en.wikipedia.org/wiki/January" (未定義でデフォルト使用)
|
43
|
+
p '1月'.month_name.iri #=> "http://hosi.org/When/BasicTypes/M17n/Calendar::Month::January" (同じIRIのオブジェクト)
|
44
|
+
p 'Calendar::Month::January'.m17n.iri #=> "http://hosi.org/When/BasicTypes/M17n/Calendar::Month::January" (同じIRIのオブジェクト)
|
45
|
+
|
46
|
+
# * 日時書式
|
47
|
+
format = 'CalendarFormats::DateTime'.m17n
|
48
|
+
p format.iri #=> "http://hosi.org/When/BasicTypes/M17n/CalendarFormats::DateTime"
|
49
|
+
p format.translate('ja') #=> "%Y/%m/%d %H:%M:%S"
|
50
|
+
p format.translate('en') #=> "%a, %d %b %Y %H:%M:%S %z"
|
51
|
+
p format.translate('fr') #=> "%d %B %Y %H:%M:%S"
|
52
|
+
p format/'ja' #=> "%Y/%m/%d %H:%M:%S"
|
53
|
+
p format/'en' #=> "%a, %d %b %Y %H:%M:%S %z"
|
54
|
+
p format/'fr' #=> "%d %B %Y %H:%M:%S"
|
55
|
+
time = [2013, 5, 29, 8, 39, 34].tm_pos(:clock=>'+09:00').strftime(format)
|
56
|
+
p time.translate('ja') #=> "2013/05/29 08:39:34"
|
57
|
+
p time.translate('en') #=> "Wed, 29 May 2013 08:39:34 +0900"
|
58
|
+
p time.translate('fr') #=> "29 mai 2013 08:39:34"
|
59
|
+
p time/'ja' #=> "2013/05/29 08:39:34"
|
60
|
+
p time/'en' #=> "Wed, 29 May 2013 08:39:34 +0900"
|
61
|
+
p time/'fr' #=> "29 mai 2013 08:39:34"
|
data/test/scripts/8.rb
ADDED
@@ -0,0 +1,62 @@
|
|
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の使用例/8.多言語対応文字列
|
9
|
+
|
10
|
+
# →関連クラス図 [[Calendar/When/Ruby/3.クラス図/02.BasicTypes]]
|
11
|
+
|
12
|
+
# *準備
|
13
|
+
require 'when_exe'
|
14
|
+
include When
|
15
|
+
|
16
|
+
# コア拡張を利用する場合は[[Calendar/When/Ruby/2.APIの使用例/8.多言語対応文字列/コア拡張]]を参照
|
17
|
+
|
18
|
+
# * グレゴリオ暦
|
19
|
+
gregorian = M17n('Christian::Gregorian')
|
20
|
+
p gregorian.iri #=> "http://hosi.org/When/BasicTypes/M17n/Christian::Gregorian"
|
21
|
+
p gregorian.translate('ja') #=> "グレゴリオ暦"
|
22
|
+
p gregorian.translate('en') #=> "Gregorian"
|
23
|
+
p gregorian.translate('fr') #=> "Gregorian" (未定義でデフォルト使用)
|
24
|
+
p gregorian/'ja' #=> "グレゴリオ暦"
|
25
|
+
p gregorian/'en' #=> "Gregorian"
|
26
|
+
p gregorian/'fr' #=> "Gregorian" (未定義でデフォルト使用)
|
27
|
+
p gregorian.reference('ja') #=> "http://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AC%E3%82%B4%E3%83%AA%E3%82%AA%E6%9A%A6"
|
28
|
+
p gregorian.reference('en') #=> "http://en.wikipedia.org/wiki/Gregorian_calendar"
|
29
|
+
p gregorian.reference('fr') #=> "http://en.wikipedia.org/wiki/Gregorian_calendar" (未定義でデフォルト使用)
|
30
|
+
p Calendar('Gregorian').label.iri #=> "http://hosi.org/When/BasicTypes/M17n/Christian::Gregorian" (同じIRIのオブジェクト)
|
31
|
+
|
32
|
+
# * 一月
|
33
|
+
january = MonthName('Jan')
|
34
|
+
p january.iri #=> "http://hosi.org/When/BasicTypes/M17n/Calendar::Month::January"
|
35
|
+
p january.translate('ja') #=> "1月"
|
36
|
+
p january.translate('en') #=> "January"
|
37
|
+
p january.translate('fr') #=> "janvier"
|
38
|
+
p january/'ja' #=> "1月"
|
39
|
+
p january/'en' #=> "January"
|
40
|
+
p january/'fr' #=> "janvier"
|
41
|
+
p january.reference('ja') #=> "http://ja.wikipedia.org/wiki/1%E6%9C%88"
|
42
|
+
p january.reference('en') #=> "http://en.wikipedia.org/wiki/January"
|
43
|
+
p january.reference('fr') #=> "http://en.wikipedia.org/wiki/January" (未定義でデフォルト使用)
|
44
|
+
p MonthName('1月').iri #=> "http://hosi.org/When/BasicTypes/M17n/Calendar::Month::January" (同じIRIのオブジェクト)
|
45
|
+
p M17n('Calendar::Month::January').iri #=> "http://hosi.org/When/BasicTypes/M17n/Calendar::Month::January" (同じIRIのオブジェクト)
|
46
|
+
|
47
|
+
# * 日時書式
|
48
|
+
format = M17n('CalendarFormats::DateTime')
|
49
|
+
p format.iri #=> "http://hosi.org/When/BasicTypes/M17n/CalendarFormats::DateTime"
|
50
|
+
p format.translate('ja') #=> "%Y/%m/%d %H:%M:%S"
|
51
|
+
p format.translate('en') #=> "%a, %d %b %Y %H:%M:%S %z"
|
52
|
+
p format.translate('fr') #=> "%d %B %Y %H:%M:%S"
|
53
|
+
p format/'ja' #=> "%Y/%m/%d %H:%M:%S"
|
54
|
+
p format/'en' #=> "%a, %d %b %Y %H:%M:%S %z"
|
55
|
+
p format/'fr' #=> "%d %B %Y %H:%M:%S"
|
56
|
+
time = tm_pos(2013, 5, 29, 8, 39, 34, :clock=>'+09:00').strftime(format)
|
57
|
+
p time.translate('ja') #=> "2013/05/29 08:39:34"
|
58
|
+
p time.translate('en') #=> "Wed, 29 May 2013 08:39:34 +0900"
|
59
|
+
p time.translate('fr') #=> "29 mai 2013 08:39:34"
|
60
|
+
p time/'ja' #=> "2013/05/29 08:39:34"
|
61
|
+
p time/'en' #=> "Wed, 29 May 2013 08:39:34 +0900"
|
62
|
+
p time/'fr' #=> "29 mai 2013 08:39:34"
|
@@ -0,0 +1,131 @@
|
|
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の使用例/9.標準クラスとの変換/コア拡張
|
9
|
+
|
10
|
+
# コアクラスを require 'when_exe/core/extension' で拡張した場合の記法を確認
|
11
|
+
|
12
|
+
# *準備
|
13
|
+
require 'date'
|
14
|
+
require 'when_exe'
|
15
|
+
require 'when_exe/core/extension'
|
16
|
+
include When
|
17
|
+
|
18
|
+
# *標準クラスからの変換
|
19
|
+
# **Dateクラス
|
20
|
+
sdate = Date.new(1582,10,15)
|
21
|
+
p sdate #=> #<Date: 1582-10-15 ((2299161j,0s,0n),+0s,2299161j)>
|
22
|
+
gdate = sdate.tm_pos
|
23
|
+
p gdate #=> 1582-10-15
|
24
|
+
p gdate.class #=> When::TM::CalDate
|
25
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Civil?reform_jdn=2299161"
|
26
|
+
sdate = Date.new(1582,10,4)
|
27
|
+
p sdate #=> #<Date: 1582-10-04 ((2299160j,0s,0n),+0s,2299161j)>
|
28
|
+
gdate = sdate.tm_pos
|
29
|
+
p gdate #=> 1582-10-04
|
30
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Civil?reform_jdn=2299161"
|
31
|
+
jdate = sdate.tm_pos(:frame=>'Gregorian')
|
32
|
+
p jdate #=> 1582-10-14
|
33
|
+
p jdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
34
|
+
|
35
|
+
# **Timeクラス
|
36
|
+
# ***UTC
|
37
|
+
stime = Time.utc(2013, 5 ,30, 16, 20, 45)
|
38
|
+
p stime #=> 2013-05-30 16:20:45 UTC
|
39
|
+
gtime = stime.tm_pos
|
40
|
+
p gtime #=> 2013-05-30T16:20:45.00Z
|
41
|
+
p gtime.class #=> When::TM::DateAndTime
|
42
|
+
p gtime.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
43
|
+
p gtime.clock.iri #=> "http://hosi.org/When/CalendarTypes/UTC"
|
44
|
+
|
45
|
+
# ***ローカル時刻
|
46
|
+
stime = Time.local(2013, 5 ,30, 16, 20, 45)
|
47
|
+
p stime #=> 2013-05-30 16:20:45 +0900
|
48
|
+
gtime = stime.tm_pos
|
49
|
+
p gtime #=> 2013-05-30T16:20:45.00+09:00
|
50
|
+
p gtime.class #=> When::TM::DateAndTime
|
51
|
+
p gtime.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
52
|
+
p gtime.clock.iri #=> "http://hosi.org/When/TM/Clock?label=+09:00"
|
53
|
+
|
54
|
+
# **Date Timeクラス
|
55
|
+
# ***UTC
|
56
|
+
sdate = DateTime.new(2013, 5 ,30, 16, 20, 45)
|
57
|
+
p sdate #=> #<DateTime: 2013-05-30T16:20:45+00:00 ((2456443j,58845s,0n),+0s,2299161j)>
|
58
|
+
gdate = sdate.tm_pos
|
59
|
+
p gdate #=> 2013-05-30T16:20:45.00Z
|
60
|
+
p gdate.class #=> When::TM::DateAndTime
|
61
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Civil?reform_jdn=2299161"
|
62
|
+
p gdate.clock.iri #=> "http://hosi.org/When/CalendarTypes/UTC"
|
63
|
+
|
64
|
+
# ***ローカル時刻
|
65
|
+
sdate = DateTime.new(2013, 5 ,30, 16, 20, 45, 0.375)
|
66
|
+
p sdate #=> #<DateTime: 2013-05-30T16:20:45+09:00 ((2456443j,26445s,0n),+32400s,2299161j)>
|
67
|
+
gdate = sdate.tm_pos
|
68
|
+
p gdate #=> 2013-05-30T16:20:45.00+09:00
|
69
|
+
p gdate.class #=> When::TM::DateAndTime
|
70
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Civil?reform_jdn=2299161"
|
71
|
+
p gdate.clock.iri #=> "http://hosi.org/When/TM/Clock?label=+09:00"
|
72
|
+
|
73
|
+
# *標準クラスへの変換
|
74
|
+
# **Dateクラス
|
75
|
+
gdate = '1582-10-15'.when?
|
76
|
+
p gdate #=> 1582-10-15
|
77
|
+
p gdate.class #=> When::TM::CalDate
|
78
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
79
|
+
sdate = gdate.to_date
|
80
|
+
p sdate #=> #<Date: 1582-10-15 ((2299161j,0s,0n),+0s,-Infj)>
|
81
|
+
gdate = '1582-10-04'.when?(:frame=>'Julian')
|
82
|
+
p gdate #=> 1582-10-04
|
83
|
+
p gdate.class #=> When::TM::CalDate
|
84
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Julian"
|
85
|
+
sdate = gdate.to_date
|
86
|
+
p sdate #=> #<Date: 1582-10-14 ((2299160j,0s,0n),+0s,-Infj)>
|
87
|
+
|
88
|
+
# to_date による変換結果は原則としてグレゴリオ暦だが、変換元がCivilのユリウス暦期間かまたはJulianの場合のみユリウス暦
|
89
|
+
|
90
|
+
# **Timeクラス
|
91
|
+
# ***UTC
|
92
|
+
gtime = '2013-05-30T16:20:45'.when?
|
93
|
+
p gtime #=> 2013-05-30T16:20:45Z
|
94
|
+
p gtime.class #=> When::TM::DateAndTime
|
95
|
+
p gtime.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
96
|
+
p gtime.clock.iri #=> "http://hosi.org/When/CalendarTypes/UTC"
|
97
|
+
stime = gtime.to_time
|
98
|
+
p stime #=> 2013-05-31 01:20:45 +0900
|
99
|
+
|
100
|
+
# ***ローカル時刻
|
101
|
+
if Object.const_defined?(:TZInfo) # TZInfo gem がインストールされていること
|
102
|
+
gtime = '2013-05-30T16:20:45'.when?(:tz=>'Asia/Tokyo')
|
103
|
+
p gtime #=> 2013-05-30T16:20:45+09:00
|
104
|
+
p gtime.class #=> When::TM::DateAndTime
|
105
|
+
p gtime.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
106
|
+
p gtime.clock.tz_prop.timezone #=> #<TZInfo::DataTimezone: Asia/Tokyo>
|
107
|
+
stime = gtime.to_time
|
108
|
+
p stime #=> 2013-05-30 16:20:45 +0900
|
109
|
+
end
|
110
|
+
# to_time による変換結果は常にローカル時刻である
|
111
|
+
|
112
|
+
# **Date Timeクラス
|
113
|
+
# ***UTC
|
114
|
+
gdate = '2013-05-30T16:20:45'.when?
|
115
|
+
p gdate #=> 2013-05-30T16:20:45Z
|
116
|
+
p gdate.class #=> When::TM::DateAndTime
|
117
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
118
|
+
p gdate.clock.iri #=> "http://hosi.org/When/CalendarTypes/UTC"
|
119
|
+
sdate = gdate.to_datetime
|
120
|
+
p sdate #=> #<DateTime: 2013-05-30T16:20:45+00:00 ((2456443j,58845s,0n),+0s,-Infj)>
|
121
|
+
|
122
|
+
# ***ローカル時刻
|
123
|
+
if Object.const_defined?(:TZInfo) # TZInfo gem がインストールされていること
|
124
|
+
gdate = '2013-05-30T16:20:45'.when?(:tz=>'Asia/Tokyo')
|
125
|
+
p gdate #=> 2013-05-30T16:20:45+09:00
|
126
|
+
p gdate.class #=> When::TM::DateAndTime
|
127
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
128
|
+
p gtime.clock.tz_prop.timezone #=> #<TZInfo::DataTimezone: Asia/Tokyo>
|
129
|
+
sdate = gdate.to_datetime
|
130
|
+
p sdate #=> #<DateTime: 2013-05-30T16:20:45+09:00 ((2456443j,26445s,0n),+32400s,-Infj)>
|
131
|
+
end
|
data/test/scripts/9.rb
ADDED
@@ -0,0 +1,130 @@
|
|
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の使用例/9.標準クラスとの変換
|
9
|
+
|
10
|
+
# *準備
|
11
|
+
require 'date'
|
12
|
+
require 'when_exe'
|
13
|
+
include When
|
14
|
+
|
15
|
+
# コア拡張を利用する場合は[[Calendar/When/Ruby/2.APIの使用例/9.標準クラスとの変換/コア拡張]]を参照
|
16
|
+
|
17
|
+
# *標準クラスからの変換
|
18
|
+
# **Dateクラス
|
19
|
+
sdate = Date.new(1582,10,15)
|
20
|
+
p sdate #=> #<Date: 1582-10-15 ((2299161j,0s,0n),+0s,2299161j)>
|
21
|
+
gdate = when?(sdate)
|
22
|
+
p gdate #=> 1582-10-15
|
23
|
+
p gdate.class #=> When::TM::CalDate
|
24
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Civil?reform_jdn=2299161"
|
25
|
+
sdate = Date.new(1582,10,4)
|
26
|
+
p sdate #=> #<Date: 1582-10-04 ((2299160j,0s,0n),+0s,2299161j)>
|
27
|
+
gdate = when?(sdate)
|
28
|
+
p gdate #=> 1582-10-04
|
29
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Civil?reform_jdn=2299161"
|
30
|
+
jdate = when?(sdate, :frame=>'Gregorian')
|
31
|
+
p jdate #=> 1582-10-14
|
32
|
+
p jdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
33
|
+
|
34
|
+
# **Timeクラス
|
35
|
+
# ***UTC
|
36
|
+
stime = Time.utc(2013, 5 ,30, 16, 20, 45)
|
37
|
+
p stime #=> 2013-05-30 16:20:45 UTC
|
38
|
+
gtime = when?(stime)
|
39
|
+
p gtime #=> 2013-05-30T16:20:45.00Z
|
40
|
+
p gtime.class #=> When::TM::DateAndTime
|
41
|
+
p gtime.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
42
|
+
p gtime.clock.iri #=> "http://hosi.org/When/CalendarTypes/UTC"
|
43
|
+
|
44
|
+
# ***ローカル時刻
|
45
|
+
stime = Time.local(2013, 5 ,30, 16, 20, 45)
|
46
|
+
p stime #=> 2013-05-30 16:20:45 +0900
|
47
|
+
gtime = when?(stime)
|
48
|
+
p gtime #=> 2013-05-30T16:20:45.00+09:00
|
49
|
+
p gtime.class #=> When::TM::DateAndTime
|
50
|
+
p gtime.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
51
|
+
p gtime.clock.iri #=> "http://hosi.org/When/TM/Clock?label=+09:00"
|
52
|
+
|
53
|
+
# **Date Timeクラス
|
54
|
+
# ***UTC
|
55
|
+
sdate = DateTime.new(2013, 5 ,30, 16, 20, 45)
|
56
|
+
p sdate #=> #<DateTime: 2013-05-30T16:20:45+00:00 ((2456443j,58845s,0n),+0s,2299161j)>
|
57
|
+
gdate = when?(sdate)
|
58
|
+
p gdate #=> 2013-05-30T16:20:45.00Z
|
59
|
+
p gdate.class #=> When::TM::DateAndTime
|
60
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Civil?reform_jdn=2299161"
|
61
|
+
p gdate.clock.iri #=> "http://hosi.org/When/CalendarTypes/UTC"
|
62
|
+
|
63
|
+
# ***ローカル時刻
|
64
|
+
sdate = DateTime.new(2013, 5 ,30, 16, 20, 45, 0.375)
|
65
|
+
p sdate #=> #<DateTime: 2013-05-30T16:20:45+09:00 ((2456443j,26445s,0n),+32400s,2299161j)>
|
66
|
+
gdate = when?(sdate)
|
67
|
+
p gdate #=> 2013-05-30T16:20:45.00+09:00
|
68
|
+
p gdate.class #=> When::TM::DateAndTime
|
69
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Civil?reform_jdn=2299161"
|
70
|
+
p gdate.clock.iri #=> "http://hosi.org/When/TM/Clock?label=+09:00"
|
71
|
+
|
72
|
+
# *標準クラスへの変換
|
73
|
+
# **Dateクラス
|
74
|
+
gdate = when?('1582-10-15')
|
75
|
+
p gdate #=> 1582-10-15
|
76
|
+
p gdate.class #=> When::TM::CalDate
|
77
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
78
|
+
sdate = gdate.to_date
|
79
|
+
p sdate #=> #<Date: 1582-10-15 ((2299161j,0s,0n),+0s,-Infj)>
|
80
|
+
gdate = when?('1582-10-04', :frame=>'Julian')
|
81
|
+
p gdate #=> 1582-10-04
|
82
|
+
p gdate.class #=> When::TM::CalDate
|
83
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Julian"
|
84
|
+
sdate = gdate.to_date
|
85
|
+
p sdate #=> #<Date: 1582-10-04 ((2299160j,0s,0n),+0s,+Infj)>
|
86
|
+
|
87
|
+
# to_date による変換結果は原則としてグレゴリオ暦だが、変換元がCivilのユリウス暦期間かまたはJulianの場合のみユリウス暦
|
88
|
+
|
89
|
+
# **Timeクラス
|
90
|
+
# ***UTC
|
91
|
+
gtime = when?('2013-05-30T16:20:45')
|
92
|
+
p gtime #=> 2013-05-30T16:20:45Z
|
93
|
+
p gtime.class #=> When::TM::DateAndTime
|
94
|
+
p gtime.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
95
|
+
p gtime.clock.iri #=> "http://hosi.org/When/CalendarTypes/UTC"
|
96
|
+
stime = gtime.to_time
|
97
|
+
p stime #=> 2013-05-31 01:20:45 +0900
|
98
|
+
|
99
|
+
# ***ローカル時刻
|
100
|
+
if Object.const_defined?(:TZInfo) # TZInfo gem がインストールされていること
|
101
|
+
gtime = when?('2013-05-30T16:20:45', :tz=>'Asia/Tokyo')
|
102
|
+
p gtime #=> 2013-05-30T16:20:45+09:00
|
103
|
+
p gtime.class #=> When::TM::DateAndTime
|
104
|
+
p gtime.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
105
|
+
p gtime.clock.tz_prop.timezone #=> #<TZInfo::DataTimezone: Asia/Tokyo>
|
106
|
+
stime = gtime.to_time
|
107
|
+
p stime #=> 2013-05-30 16:20:45 +0900
|
108
|
+
end
|
109
|
+
# to_time による変換結果は常にローカル時刻である
|
110
|
+
|
111
|
+
# **Date Timeクラス
|
112
|
+
# ***UTC
|
113
|
+
gdate = when?('2013-05-30T16:20:45')
|
114
|
+
p gdate #=> 2013-05-30T16:20:45Z
|
115
|
+
p gdate.class #=> When::TM::DateAndTime
|
116
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
117
|
+
p gdate.clock.iri #=> "http://hosi.org/When/CalendarTypes/UTC"
|
118
|
+
sdate = gdate.to_datetime
|
119
|
+
p sdate #=> #<DateTime: 2013-05-30T16:20:45+00:00 ((2456443j,58845s,0n),+0s,-Infj)>
|
120
|
+
|
121
|
+
# ***ローカル時刻
|
122
|
+
if Object.const_defined?(:TZInfo) # TZInfo gem がインストールされていること
|
123
|
+
gdate = when?('2013-05-30T16:20:45', :tz=>'Asia/Tokyo')
|
124
|
+
p gdate #=> 2013-05-30T16:20:45+09:00
|
125
|
+
p gdate.class #=> When::TM::DateAndTime
|
126
|
+
p gdate.frame.iri #=> "http://hosi.org/When/CalendarTypes/Gregorian"
|
127
|
+
p gtime.clock.tz_prop.timezone #=> #<TZInfo::DataTimezone: Asia/Tokyo>
|
128
|
+
sdate = gdate.to_datetime
|
129
|
+
p sdate #=> #<DateTime: 2013-05-30T16:20:45+09:00 ((2456443j,26445s,0n),+32400s,-Infj)>
|
130
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright (C) 2014 Takashi SUGA
|
4
|
+
#
|
5
|
+
require 'pp'
|
6
|
+
require 'when_exe'
|
7
|
+
require 'when_exe/region/chinese/calendars'
|
8
|
+
include When
|
9
|
+
|
10
|
+
def check(range, name, base, force=false)
|
11
|
+
calendar = Calendar(name)
|
12
|
+
count = 0
|
13
|
+
months = 0
|
14
|
+
puts "期間: #{name.sub(/^.*::/,'')} <#{range}>"
|
15
|
+
puts ' 相違暦日 通日 日の干支 計算暦日 朔(計算) 定朔時刻/h(/d) 閏'
|
16
|
+
date = when?("#{range.first}-1^^#{base}")
|
17
|
+
while range.include?(date[YEAR]) do
|
18
|
+
count += 1
|
19
|
+
months += 1 unless verify(date.floor, calendar, force)
|
20
|
+
date = date.next
|
21
|
+
end
|
22
|
+
puts "相違暦日集計: <%d/%d>\n\n" % [months, count] unless force
|
23
|
+
end
|
24
|
+
|
25
|
+
def verify(date0, calendar, force=false)
|
26
|
+
date1 = calendar ^ date0
|
27
|
+
if !force && date0.to_s == date1.to_s
|
28
|
+
true
|
29
|
+
else # 史上の暦日と不一致の場合は詳細を出力
|
30
|
+
m = When::Coordinates::Residue.mod(date0.to_i+3) {|cn| calendar.formula[-1].cn_to_time(cn)}
|
31
|
+
t = calendar.formula[-1].cn_to_time(m[0]) + 0.5
|
32
|
+
t -= calendar._time_basis[1].universal_time / 675 if calendar._time_basis[1]
|
33
|
+
t,f = t.divmod(1)
|
34
|
+
puts '%s %d %s %s %d %8.4f(%7.5f) %s' %
|
35
|
+
[date0, date0.to_i, Residue('干支') % date0, date1, t, f * 24.0, f, date0[DAY] == date1[DAY] ? '*' : '']
|
36
|
+
false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
check(1281...1368, 'ChineseTwin::大統暦', 'Chinese0939')
|
41
|
+
check(1368...1500, 'ChineseTwin::大統暦', 'Chinese0939')
|
42
|
+
check(1501...1600, 'ChineseTwin::大統暦', 'Chinese0939')
|
43
|
+
check(1601...1662, 'ChineseTwin::大統暦', 'Chinese0939')
|
44
|
+
check(1685...1687, 'JapaneseTwin::貞享乙丑暦', 'Japanese')
|
45
|
+
check(1687...1753, 'JapaneseTwin::貞享暦', 'Japanese')
|
46
|
+
check(1753...1754, 'JapaneseTwin::宝暦癸酉暦', 'Japanese')
|
47
|
+
check(1754...1755, 'JapaneseTwin::宝暦甲戌暦', 'Japanese')
|
48
|
+
check(1755...1771, 'JapaneseTwin::宝暦暦', 'Japanese')
|
49
|
+
check(1771...1798, 'JapaneseTwin::修正宝暦暦', 'Japanese')
|
50
|
+
check(1798...1827, 'JapaneseTwin::寛政暦', 'Japanese')
|
51
|
+
check(1827...1844, 'JapaneseTwin::寛政丁亥暦', 'Japanese')
|
52
|
+
check(1844...1873, 'JapaneseTwin::天保暦', 'Japanese')
|
@@ -1,41 +1,41 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
=begin
|
3
|
-
Copyright (C) 2011-2013 Takashi SUGA
|
4
|
-
|
5
|
-
You may use and/or modify this file according to the license
|
6
|
-
described in the LICENSE.txt file included in this archive.
|
7
|
-
=end
|
8
|
-
|
9
|
-
require 'pp'
|
10
|
-
require 'when_exe'
|
11
|
-
include When
|
12
|
-
|
13
|
-
range_null = Parts::GeometricComplex.new()
|
14
|
-
range_1_1 = Parts::GeometricComplex.new(1)
|
15
|
-
range_1_4 = Parts::GeometricComplex.new(1,4)
|
16
|
-
range_2_2 = Parts::GeometricComplex.new(2)
|
17
|
-
range_2_3 = Parts::GeometricComplex.new(2,3)
|
18
|
-
range_2_5 = Parts::GeometricComplex.new(2,5)
|
19
|
-
range_4_4 = Parts::GeometricComplex.new(4)
|
20
|
-
pp range_1_4
|
21
|
-
pp range_2_3
|
22
|
-
range_1_4.each {|x| pp x}
|
23
|
-
pp range_4_4
|
24
|
-
pp range_1_4 | range_2_3
|
25
|
-
pp range_1_4.include?(range_2_2)
|
26
|
-
pp range_1_4.include?(range_2_3)
|
27
|
-
range_1_5 = range_1_4 | range_2_5
|
28
|
-
pp range_1_5
|
29
|
-
pp range_1_4.include?(range_2_5)
|
30
|
-
pp range_1_4 | range_4_4
|
31
|
-
pp range_1_4.include?(range_4_4)
|
32
|
-
reverse_all = Parts::GeometricComplex.new(true)
|
33
|
-
reverse_1_4 = Parts::GeometricComplex.new(1,4, true)
|
34
|
-
reverse_2_3 = Parts::GeometricComplex.new(2,3, true)
|
35
|
-
reverse_2_5 = Parts::GeometricComplex.new(2,5, true)
|
36
|
-
pp reverse_all
|
37
|
-
pp reverse_1_4
|
38
|
-
pp reverse_2_3
|
39
|
-
pp reverse_2_3 | range_2_3
|
40
|
-
pp reverse_1_4 | range_2_5
|
41
|
-
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
Copyright (C) 2011-2013 Takashi SUGA
|
4
|
+
|
5
|
+
You may use and/or modify this file according to the license
|
6
|
+
described in the LICENSE.txt file included in this archive.
|
7
|
+
=end
|
8
|
+
|
9
|
+
require 'pp'
|
10
|
+
require 'when_exe'
|
11
|
+
include When
|
12
|
+
|
13
|
+
range_null = Parts::GeometricComplex.new()
|
14
|
+
range_1_1 = Parts::GeometricComplex.new(1)
|
15
|
+
range_1_4 = Parts::GeometricComplex.new(1,4)
|
16
|
+
range_2_2 = Parts::GeometricComplex.new(2)
|
17
|
+
range_2_3 = Parts::GeometricComplex.new(2,3)
|
18
|
+
range_2_5 = Parts::GeometricComplex.new(2,5)
|
19
|
+
range_4_4 = Parts::GeometricComplex.new(4)
|
20
|
+
pp range_1_4
|
21
|
+
pp range_2_3
|
22
|
+
range_1_4.each {|x| pp x}
|
23
|
+
pp range_4_4
|
24
|
+
pp range_1_4 | range_2_3
|
25
|
+
pp range_1_4.include?(range_2_2)
|
26
|
+
pp range_1_4.include?(range_2_3)
|
27
|
+
range_1_5 = range_1_4 | range_2_5
|
28
|
+
pp range_1_5
|
29
|
+
pp range_1_4.include?(range_2_5)
|
30
|
+
pp range_1_4 | range_4_4
|
31
|
+
pp range_1_4.include?(range_4_4)
|
32
|
+
reverse_all = Parts::GeometricComplex.new(true)
|
33
|
+
reverse_1_4 = Parts::GeometricComplex.new(1,4, true)
|
34
|
+
reverse_2_3 = Parts::GeometricComplex.new(2,3, true)
|
35
|
+
reverse_2_5 = Parts::GeometricComplex.new(2,5, true)
|
36
|
+
pp reverse_all
|
37
|
+
pp reverse_1_4
|
38
|
+
pp reverse_2_3
|
39
|
+
pp reverse_2_3 | range_2_3
|
40
|
+
pp reverse_1_4 | range_2_5
|
41
|
+
|