when_exe 0.3.6 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +171 -0
- data/lib/when_exe.rb +78 -47
- data/lib/when_exe/basictypes.rb +752 -747
- data/lib/when_exe/calendarnote.rb +805 -801
- data/lib/when_exe/calendartypes.rb +1583 -1531
- data/lib/when_exe/coordinates.rb +16 -15
- data/lib/when_exe/core/duration.rb +114 -110
- data/lib/when_exe/core/extension.rb +504 -504
- data/lib/when_exe/ephemeris.rb +1917 -1913
- data/lib/when_exe/ephemeris/moon.rb +333 -333
- data/lib/when_exe/ephemeris/notes.rb +389 -387
- data/lib/when_exe/ephemeris/planets.rb +585 -585
- data/lib/when_exe/ephemeris/sun.rb +214 -214
- data/lib/when_exe/googlecalendar.rb +144 -140
- data/lib/when_exe/icalendar.rb +1636 -1636
- data/lib/when_exe/inspect.rb +46 -22
- data/lib/when_exe/locales/akt.rb +176 -176
- data/lib/when_exe/locales/encoding_conversion.rb +134 -126
- data/lib/when_exe/locales/iast.rb +90 -90
- data/lib/when_exe/locales/locale.rb +750 -746
- data/lib/when_exe/locales/transliteration_table.rb +62 -62
- data/lib/when_exe/mini_application.rb +307 -305
- data/lib/when_exe/parts/enumerator.rb +2 -2
- data/lib/when_exe/parts/geometric_complex.rb +397 -397
- data/lib/when_exe/parts/method_cash.rb +224 -224
- data/lib/when_exe/parts/resource.rb +1069 -1071
- data/lib/when_exe/parts/timezone.rb +240 -230
- data/lib/when_exe/region/armenian.rb +56 -56
- data/lib/when_exe/region/babylonian.rb +405 -0
- data/lib/when_exe/region/bahai.rb +146 -146
- data/lib/when_exe/region/balinese.rb +622 -622
- data/lib/when_exe/region/chinese.rb +95 -25
- data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
- data/lib/when_exe/region/chinese/epochs.rb +1 -1
- data/lib/when_exe/region/chinese/twins.rb +803 -795
- data/lib/when_exe/region/christian.rb +824 -824
- data/lib/when_exe/region/coptic.rb +106 -87
- data/lib/when_exe/region/discordian.rb +225 -225
- data/lib/when_exe/region/far_east.rb +188 -188
- data/lib/when_exe/region/french.rb +56 -56
- data/lib/when_exe/region/geologicalage.rb +639 -639
- data/lib/when_exe/region/goddess.rb +58 -58
- data/lib/when_exe/region/indian.rb +1254 -1251
- data/lib/when_exe/region/iranian.rb +8 -8
- data/lib/when_exe/region/islamic.rb +3 -3
- data/lib/when_exe/region/japanese.rb +93 -99
- data/lib/when_exe/region/japanese/calendars.rb +396 -397
- data/lib/when_exe/region/japanese/epochs.rb +26 -26
- data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
- data/lib/when_exe/region/japanese/notes.rb +1383 -1386
- data/lib/when_exe/region/japanese/residues.rb +1306 -1306
- data/lib/when_exe/region/japanese/twins.rb +225 -225
- data/lib/when_exe/region/japanese/weeks.rb +112 -0
- data/lib/when_exe/region/javanese.rb +230 -230
- data/lib/when_exe/region/jewish.rb +126 -126
- data/lib/when_exe/region/korean.rb +378 -378
- data/lib/when_exe/region/m17n.rb +114 -113
- data/lib/when_exe/region/martian.rb +258 -255
- data/lib/when_exe/region/mayan.rb +32 -32
- data/lib/when_exe/region/residue.rb +89 -89
- data/lib/when_exe/region/roman.rb +36 -24
- data/lib/when_exe/region/ryukyu.rb +97 -97
- data/lib/when_exe/region/shire.rb +240 -240
- data/lib/when_exe/region/soviet.rb +209 -0
- data/lib/when_exe/region/symmetry.rb +50 -50
- data/lib/when_exe/region/thai.rb +336 -335
- data/lib/when_exe/region/tibetan.rb +316 -315
- data/lib/when_exe/region/vietnamese.rb +440 -439
- data/lib/when_exe/region/weekdate.rb +80 -80
- data/lib/when_exe/region/world.rb +175 -175
- data/lib/when_exe/region/yerm.rb +14 -14
- data/lib/when_exe/region/zoroastrian.rb +203 -203
- data/lib/when_exe/timestandard.rb +707 -681
- data/lib/when_exe/tmduration.rb +338 -330
- data/lib/when_exe/tmobjects.rb +1346 -1325
- data/lib/when_exe/tmposition.rb +2115 -2072
- data/lib/when_exe/tmreference.rb +1693 -1669
- data/lib/when_exe/version.rb +1 -1
- data/link_to_online_documents +1 -1
- data/test/examples/JapanHolidaysRFC6350.ics +1 -1
- data/test/test.rb +67 -61
- data/test/test/basictypes.rb +409 -409
- data/test/test/calendarnote.rb +86 -69
- data/test/test/calendartypes.rb +97 -97
- data/test/test/coordinates.rb +396 -396
- data/test/test/ephemeris.rb +83 -74
- data/test/test/ephemeris/moon.rb +14 -14
- data/test/test/ephemeris/planets.rb +14 -14
- data/test/test/ephemeris/sun.rb +14 -14
- data/test/test/googlecalendar.rb +194 -176
- data/test/test/icalendar.rb +867 -858
- data/test/test/inspect.rb +117 -117
- data/test/test/parts.rb +487 -487
- data/test/test/region/balinese.rb +34 -0
- data/test/test/region/chinese.rb +218 -206
- data/test/test/region/christian.rb +245 -245
- data/test/test/region/coptic.rb +27 -27
- data/test/test/region/french.rb +33 -33
- data/test/test/region/geologicalage.rb +17 -17
- data/test/test/region/indian.rb +57 -57
- data/test/test/region/iran.rb +54 -54
- data/test/test/region/islamic.rb +18 -18
- data/test/test/region/japanese.rb +237 -219
- data/test/test/region/jewish.rb +61 -61
- data/test/test/region/m17n.rb +184 -184
- data/test/test/region/mayan.rb +195 -195
- data/test/test/region/residue.rb +147 -139
- data/test/test/region/thai.rb +116 -116
- data/test/test/region/tibetan.rb +30 -30
- data/test/test/region/vietnamese.rb +102 -102
- data/test/test/region/yerm.rb +146 -146
- data/test/test/timestandard.rb +81 -81
- data/test/test/tmobjects.rb +328 -328
- data/test/test/tmposition.rb +397 -284
- data/test/test/tmreference.rb +157 -157
- metadata +13 -10
|
@@ -1,230 +1,240 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
=begin
|
|
3
|
-
Copyright (C) 2011-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
|
-
#
|
|
9
|
-
# 本ライブラリのための諸々の部品
|
|
10
|
-
#
|
|
11
|
-
module When::Parts
|
|
12
|
-
|
|
13
|
-
#
|
|
14
|
-
# TZInfo::Timezone クラスを本ライブラリから使用するためのラッパークラス
|
|
15
|
-
#
|
|
16
|
-
class Timezone
|
|
17
|
-
|
|
18
|
-
#
|
|
19
|
-
# When::V::Timezone と Qhwn::Parts::Timezone の抽象基底
|
|
20
|
-
#
|
|
21
|
-
module Base
|
|
22
|
-
# 標準時間帯の時計
|
|
23
|
-
# @return [When::TM::Clock]
|
|
24
|
-
attr_reader :standard
|
|
25
|
-
|
|
26
|
-
# 夏時間帯の時計
|
|
27
|
-
# @return [When::TM::Clock]
|
|
28
|
-
attr_reader :daylight
|
|
29
|
-
|
|
30
|
-
# 夏時間帯と標準時間帯の時間差
|
|
31
|
-
# @return [When::TM:IntervalLength]
|
|
32
|
-
attr_reader :tz_difference
|
|
33
|
-
|
|
34
|
-
# When::TM::TemporalPosition の時間帯を変更して複製する
|
|
35
|
-
#
|
|
36
|
-
# @param [When::TM::CalDate, When::TM::DateAndTime, When::TM::JulianDate] date
|
|
37
|
-
# @param [Hash] options see {When::TM::TemporalPosition._instance}
|
|
38
|
-
#
|
|
39
|
-
# @return [When::TM::DateAndTime, When::TM::JulianDate]
|
|
40
|
-
#
|
|
41
|
-
def ^(date, options={})
|
|
42
|
-
date = When::TM::Position.any_other(date, options)
|
|
43
|
-
options = date._attr.merge({:clock=>self}).merge(options)
|
|
44
|
-
return When::TM::JulianDate.dynamical_time(date.dynamical_time, options) unless date.frame.kind_of?(When::TM::Calendar)
|
|
45
|
-
date.frame.jul_trans(When::TM::JulianDate.dynamical_time(date.dynamical_time), options)
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
class << self
|
|
50
|
-
include Resource::Pool
|
|
51
|
-
|
|
52
|
-
# @private
|
|
53
|
-
alias :_get :[]
|
|
54
|
-
|
|
55
|
-
# オブジェクト参照
|
|
56
|
-
#
|
|
57
|
-
# @param [String] label 識別名 ( "America/New_York" など)
|
|
58
|
-
#
|
|
59
|
-
# @return [When::Parts::Timezone] 時間帯オブジェクト
|
|
60
|
-
#
|
|
61
|
-
def [](label)
|
|
62
|
-
ref = _get(label)
|
|
63
|
-
return ref if ref
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
#
|
|
72
|
-
#
|
|
73
|
-
#
|
|
74
|
-
# [
|
|
75
|
-
#
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
zones[z.identifier]
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
#
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
#
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
#
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
#
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
#
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
#
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
#
|
|
140
|
-
#
|
|
141
|
-
#
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
@daylight =
|
|
174
|
-
@tz_difference =
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2011-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
|
+
#
|
|
9
|
+
# 本ライブラリのための諸々の部品
|
|
10
|
+
#
|
|
11
|
+
module When::Parts
|
|
12
|
+
|
|
13
|
+
#
|
|
14
|
+
# TZInfo::Timezone クラスを本ライブラリから使用するためのラッパークラス
|
|
15
|
+
#
|
|
16
|
+
class Timezone
|
|
17
|
+
|
|
18
|
+
#
|
|
19
|
+
# When::V::Timezone と Qhwn::Parts::Timezone の抽象基底
|
|
20
|
+
#
|
|
21
|
+
module Base
|
|
22
|
+
# 標準時間帯の時計
|
|
23
|
+
# @return [When::TM::Clock]
|
|
24
|
+
attr_reader :standard
|
|
25
|
+
|
|
26
|
+
# 夏時間帯の時計
|
|
27
|
+
# @return [When::TM::Clock]
|
|
28
|
+
attr_reader :daylight
|
|
29
|
+
|
|
30
|
+
# 夏時間帯と標準時間帯の時間差
|
|
31
|
+
# @return [When::TM:IntervalLength]
|
|
32
|
+
attr_reader :tz_difference
|
|
33
|
+
|
|
34
|
+
# When::TM::TemporalPosition の時間帯を変更して複製する
|
|
35
|
+
#
|
|
36
|
+
# @param [When::TM::CalDate, When::TM::DateAndTime, When::TM::JulianDate] date
|
|
37
|
+
# @param [Hash] options see {When::TM::TemporalPosition._instance}
|
|
38
|
+
#
|
|
39
|
+
# @return [When::TM::DateAndTime, When::TM::JulianDate]
|
|
40
|
+
#
|
|
41
|
+
def ^(date, options={})
|
|
42
|
+
date = When::TM::Position.any_other(date, options)
|
|
43
|
+
options = date._attr.merge({:clock=>self}).merge(options)
|
|
44
|
+
return When::TM::JulianDate.dynamical_time(date.dynamical_time, options) unless date.frame.kind_of?(When::TM::Calendar)
|
|
45
|
+
date.frame.jul_trans(When::TM::JulianDate.dynamical_time(date.dynamical_time), options)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class << self
|
|
50
|
+
include Resource::Pool
|
|
51
|
+
|
|
52
|
+
# @private
|
|
53
|
+
alias :_get :[]
|
|
54
|
+
|
|
55
|
+
# オブジェクト参照
|
|
56
|
+
#
|
|
57
|
+
# @param [String] label 識別名 ( "America/New_York" など)
|
|
58
|
+
#
|
|
59
|
+
# @return [When::Parts::Timezone] 時間帯オブジェクト
|
|
60
|
+
#
|
|
61
|
+
def [](label)
|
|
62
|
+
ref = _get(label)
|
|
63
|
+
return ref if ref
|
|
64
|
+
return nil unless label =~ /\A[A-Z]/i
|
|
65
|
+
self[label] = self.new(label)
|
|
66
|
+
rescue NameError
|
|
67
|
+
raise NameError, 'Prease install TZInfo - gem install tzinfo'
|
|
68
|
+
end
|
|
69
|
+
alias :get :[]
|
|
70
|
+
|
|
71
|
+
# TZInfo でサポートしている Timezone の連想配列
|
|
72
|
+
#
|
|
73
|
+
# @return [Hash] { String => TZInfo::CountryTimezone }
|
|
74
|
+
# [ String - 時間帯ID ]
|
|
75
|
+
# [ TZInfo::CountryTimezone - 時間帯オブジェクト(proxy for autoload) ]
|
|
76
|
+
#
|
|
77
|
+
def tz_info
|
|
78
|
+
return @tz_info if @tz_info
|
|
79
|
+
zones = {}
|
|
80
|
+
TZInfo::Country.all.each do |c|
|
|
81
|
+
c.zone_info.each do |z|
|
|
82
|
+
zones[z.identifier] ||= {}
|
|
83
|
+
zones[z.identifier][c.code] = z
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
@tz_info = {}
|
|
88
|
+
zones.each_pair do |id, hash|
|
|
89
|
+
if hash.keys.size == 1
|
|
90
|
+
@tz_info[id] = hash[hash.keys[0]]
|
|
91
|
+
else
|
|
92
|
+
hash.each_pair do |c, z|
|
|
93
|
+
@tz_info["#{id}(#{c})"] = z
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
@tz_info
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
include Base
|
|
102
|
+
|
|
103
|
+
# ラップしている TZInfo::Timezone インスタンス
|
|
104
|
+
# @return [TZInfo::Timezone]
|
|
105
|
+
attr_reader :timezone
|
|
106
|
+
|
|
107
|
+
# ユニーク識別名
|
|
108
|
+
# @return [String]
|
|
109
|
+
def label
|
|
110
|
+
@timezone.identifier
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# 時間帯を代表する都市の経度 / 度
|
|
114
|
+
# @return [Rational]
|
|
115
|
+
def longitude
|
|
116
|
+
self.class.tz_info[label].longitude
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# 時間帯を代表する都市の緯度 / 度
|
|
120
|
+
# @return [Rational]
|
|
121
|
+
def latitude
|
|
122
|
+
self.class.tz_info[label].latitude
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# 時間帯を代表する都市の空間位置
|
|
126
|
+
# @return [When::Coordinates::Spatial]
|
|
127
|
+
def location
|
|
128
|
+
return @location if @location
|
|
129
|
+
tzinfo = self.class.tz_info[label]
|
|
130
|
+
longitude = When::Coordinates.to_dms(tzinfo.longitude, 'EW')
|
|
131
|
+
latitude = When::Coordinates.to_dms(tzinfo.latitude, 'NS')
|
|
132
|
+
@location = When.Resource("_l:long=#{longitude}&lat=#{latitude}&label=#{label}")
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# 時分秒のインデクス
|
|
136
|
+
# @return [Array<When::Coordinates::Index>]
|
|
137
|
+
attr_reader :indices
|
|
138
|
+
|
|
139
|
+
# オブジェクト生成
|
|
140
|
+
#
|
|
141
|
+
# @param [String] identifier 識別名 ( "America/New_York" など)
|
|
142
|
+
#
|
|
143
|
+
def initialize(identifier)
|
|
144
|
+
id, query = identifier.split('?', 2)
|
|
145
|
+
@timezone = TZInfo::Timezone.get(id)
|
|
146
|
+
unless TZInfo::TimeOrDateTime.method_defined?(:_to_datetime)
|
|
147
|
+
if TZInfo::RubyCoreSupport.respond_to?(:datetime_new)
|
|
148
|
+
TZInfo::TimeOrDateTime.class_eval %Q{
|
|
149
|
+
alias :_to_datetime :to_datetime
|
|
150
|
+
::Rational
|
|
151
|
+
def to_datetime
|
|
152
|
+
unless @datetime
|
|
153
|
+
u = usec
|
|
154
|
+
s = u == 0 ? sec : Rational(sec * 1000000 + u, 1000000)
|
|
155
|
+
@datetime = TZInfo::RubyCoreSupport.datetime_new(year, mon, mday, hour, min, s, 0, Date::GREGORIAN)
|
|
156
|
+
end
|
|
157
|
+
@datetime
|
|
158
|
+
end
|
|
159
|
+
}
|
|
160
|
+
else
|
|
161
|
+
TZInfo::TimeOrDateTime.class_eval %Q{
|
|
162
|
+
alias :_to_datetime :to_datetime
|
|
163
|
+
def to_datetime
|
|
164
|
+
@datetime ||= DateTime.new(year, mon, mday, hour, min, sec, 0, Date::GREGORIAN)
|
|
165
|
+
end
|
|
166
|
+
}
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
dst, std = _offsets(Time.now.to_i)
|
|
170
|
+
options = query ? Hash[*(query.split('&').map {|item| item.split('=',2)}.flatten)] : {}
|
|
171
|
+
@standard = When::TM::Clock.new(options.merge({:zone=>std, :tz_prop=>self}))
|
|
172
|
+
if std == dst
|
|
173
|
+
@daylight = @standard
|
|
174
|
+
@tz_difference = 0
|
|
175
|
+
else
|
|
176
|
+
@daylight = When::TM::Clock.new(options.merge({:zone=>dst, :tz_prop=>self}))
|
|
177
|
+
@tz_difference = @standard.universal_time - @daylight.universal_time
|
|
178
|
+
end
|
|
179
|
+
@indices = When::Coordinates::DefaultTimeIndices
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# @private
|
|
183
|
+
def _daylight(time)
|
|
184
|
+
frame, cal_date, clk_time = time
|
|
185
|
+
clocks = {}
|
|
186
|
+
options = {}
|
|
187
|
+
%w(border location).each do |attr|
|
|
188
|
+
value = @standard.instance_variable_get("@#{attr}")
|
|
189
|
+
next unless value
|
|
190
|
+
value = value.dup unless value.kind_of?(When::Parts::Resource) && value.registered?
|
|
191
|
+
options[attr] = value
|
|
192
|
+
end
|
|
193
|
+
if clk_time
|
|
194
|
+
time = frame.to_universal_time(cal_date, clk_time, @standard)
|
|
195
|
+
offsets = _offsets((time/When::TM::Duration::SECOND).floor)
|
|
196
|
+
offsets.each do |offset|
|
|
197
|
+
clocks[offset] ||= When::TM::Clock.new(options.merge({:zone=>offset, :tz_prop=>self}))
|
|
198
|
+
return clocks[offsets[0]] if @timezone.period_for_utc(
|
|
199
|
+
(frame.to_universal_time(cal_date, clk_time, clocks[offset])/When::TM::Duration::SECOND).floor).dst?
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
offset = @timezone.period_for_utc((time/When::TM::Duration::SECOND).floor).utc_total_offset
|
|
203
|
+
clocks[offset] || When::TM::Clock.new(options.merge({:zone=>offset, :tz_prop=>self}))
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# @private
|
|
207
|
+
def _need_validate
|
|
208
|
+
true
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
private
|
|
212
|
+
|
|
213
|
+
def _offsets(time)
|
|
214
|
+
now = @timezone.period_for_utc(time)
|
|
215
|
+
past = @timezone.period_for_utc(now.utc_start-1) if now.utc_start
|
|
216
|
+
future = @timezone.period_for_utc(now.utc_end) if now.utc_end
|
|
217
|
+
std = now.utc_offset
|
|
218
|
+
dst = now.utc_total_offset
|
|
219
|
+
[past, future].each do |period|
|
|
220
|
+
next unless period
|
|
221
|
+
std = period.utc_offset if std > period.utc_offset
|
|
222
|
+
dst = period.utc_total_offset if dst < period.utc_total_offset
|
|
223
|
+
end
|
|
224
|
+
[dst, std]
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
# その他のメソッド
|
|
228
|
+
# When::Parts::GeometricComplex で定義されていないメソッドは
|
|
229
|
+
# 処理を first (type: When::TM::(Temporal)Position) に委譲する
|
|
230
|
+
#
|
|
231
|
+
def method_missing(name, *args, &block)
|
|
232
|
+
self.class.module_eval %Q{
|
|
233
|
+
def #{name}(*args, &block)
|
|
234
|
+
timezone.send("#{name}", *args, &block)
|
|
235
|
+
end
|
|
236
|
+
} unless When::Parts::MethodCash.escape(name)
|
|
237
|
+
timezone.send(name, *args, &block)
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|