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.
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
+