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.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +210 -171
  3. data/bin/irb.rc +1 -0
  4. data/lib/when_exe.rb +78 -53
  5. data/lib/when_exe/basictypes.rb +27 -8
  6. data/lib/when_exe/calendarnote.rb +848 -805
  7. data/lib/when_exe/calendartypes.rb +110 -240
  8. data/lib/when_exe/coordinates.rb +2440 -2175
  9. data/lib/when_exe/core/compatibility.rb +1 -1
  10. data/lib/when_exe/core/duration.rb +13 -11
  11. data/lib/when_exe/core/extension.rb +38 -45
  12. data/lib/when_exe/ephemeris.rb +43 -14
  13. data/lib/when_exe/ephemeris/eclipse.rb +149 -0
  14. data/lib/when_exe/ephemeris/notes.rb +39 -7
  15. data/lib/when_exe/icalendar.rb +2 -6
  16. data/lib/when_exe/inspect.rb +1408 -1399
  17. data/lib/when_exe/parts/enumerator.rb +486 -477
  18. data/lib/when_exe/parts/resource.rb +1101 -1069
  19. data/lib/when_exe/parts/timezone.rb +6 -5
  20. data/lib/when_exe/region/babylonian.rb +405 -405
  21. data/lib/when_exe/region/bahai.rb +21 -61
  22. data/lib/when_exe/region/chinese/epochs.rb +81 -81
  23. data/lib/when_exe/region/chinese/twins.rb +51 -51
  24. data/lib/when_exe/region/christian.rb +7 -2
  25. data/lib/when_exe/region/coptic.rb +1 -1
  26. data/lib/when_exe/region/discordian.rb +9 -16
  27. data/lib/when_exe/region/french.rb +1 -1
  28. data/lib/when_exe/region/hanke_henry.rb +57 -0
  29. data/lib/when_exe/region/indian.rb +41 -73
  30. data/lib/when_exe/region/international_fixed.rb +97 -0
  31. data/lib/when_exe/region/iranian.rb +203 -203
  32. data/lib/when_exe/region/japanese.rb +13 -13
  33. data/lib/when_exe/region/japanese/eclipses.rb +1194 -0
  34. data/lib/when_exe/region/japanese/notes.rb +1482 -1383
  35. data/lib/when_exe/region/japanese/residues.rb +726 -721
  36. data/lib/when_exe/region/japanese/twins.rb +37 -37
  37. data/lib/when_exe/region/jewish.rb +2 -2
  38. data/lib/when_exe/region/pax.rb +60 -0
  39. data/lib/when_exe/region/positivist.rb +100 -0
  40. data/lib/when_exe/region/roman.rb +333 -334
  41. data/lib/when_exe/region/shire.rb +3 -20
  42. data/lib/when_exe/region/thai.rb +2 -2
  43. data/lib/when_exe/region/tibetan.rb +3 -3
  44. data/lib/when_exe/region/tranquility.rb +208 -0
  45. data/lib/when_exe/region/vanishing_leprechaun.rb +53 -0
  46. data/lib/when_exe/region/vietnamese.rb +4 -4
  47. data/lib/when_exe/region/world.rb +9 -13
  48. data/lib/when_exe/region/world_season.rb +89 -0
  49. data/lib/when_exe/region/zoroastrian.rb +4 -2
  50. data/lib/when_exe/tmobjects.rb +14 -4
  51. data/lib/when_exe/tmposition.rb +239 -81
  52. data/lib/when_exe/tmreference.rb +57 -28
  53. data/lib/when_exe/version.rb +1 -1
  54. data/link_to_online_documents +6 -3
  55. data/test/examples/today.rb +1 -1
  56. data/test/scripts.rb +23 -0
  57. data/test/scripts/2.ext.rb +169 -0
  58. data/test/scripts/2.rb +169 -0
  59. data/test/scripts/3.ext.rb +133 -0
  60. data/test/scripts/3.rb +134 -0
  61. data/test/scripts/4.ext.rb +112 -0
  62. data/test/scripts/4.min.rb +65 -0
  63. data/test/scripts/4.rb +136 -0
  64. data/test/scripts/5.ext.rb +78 -0
  65. data/test/scripts/5.rb +81 -0
  66. data/test/scripts/6.gcal.rb +131 -0
  67. data/test/scripts/6.rb +205 -0
  68. data/test/scripts/6.tz.rb +105 -0
  69. data/test/scripts/7.phase.rb +109 -0
  70. data/test/scripts/7.rb +95 -0
  71. data/test/scripts/7.term.rb +128 -0
  72. data/test/scripts/7.week.rb +84 -0
  73. data/test/scripts/8.ext.rb +61 -0
  74. data/test/scripts/8.rb +62 -0
  75. data/test/scripts/9.ext.rb +131 -0
  76. data/test/scripts/9.rb +130 -0
  77. data/test/scripts/chinese-luni-solar.rb +52 -0
  78. data/test/{examples → scripts}/geometric_complex.rb +41 -41
  79. data/test/scripts/geometric_complex.txt +18 -0
  80. data/test/scripts/korea.rb +59 -0
  81. data/test/scripts/thai-reviewed.txt +211 -0
  82. data/test/scripts/thai.rb +36 -0
  83. data/test/scripts/thai.txt +210 -0
  84. data/test/test.rb +7 -0
  85. data/test/test/basictypes.rb +22 -0
  86. data/test/test/coordinates.rb +2 -1
  87. data/test/test/ephemeris.rb +34 -2
  88. data/test/test/icalendar.rb +12 -0
  89. data/test/test/inspect.rb +37 -1
  90. data/test/test/parts.rb +4 -3
  91. data/test/test/region/armenian.rb +20 -0
  92. data/test/test/region/bahai.rb +58 -0
  93. data/test/test/region/chinese.rb +14 -3
  94. data/test/test/region/christian.rb +16 -35
  95. data/test/test/region/discordian.rb +20 -0
  96. data/test/test/region/indian.rb +30 -2
  97. data/test/test/region/japanese.rb +24 -0
  98. data/test/test/region/jewish.rb +2 -0
  99. data/test/test/region/m17n.rb +9 -0
  100. data/test/test/region/reforms.rb +121 -0
  101. data/test/test/region/residue.rb +17 -11
  102. data/test/test/region/shire.rb +58 -0
  103. data/test/test/region/swedish.rb +45 -0
  104. data/test/test/region/zoroastrian.rb +58 -0
  105. data/test/test/tmobjects.rb +74 -0
  106. data/test/test/tmposition.rb +468 -397
  107. data/when_exe.gemspec +2 -2
  108. 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
+