Class: When::TM::Calendar
- Inherits:
-
ReferenceSystem
- Object
- BasicTypes::Object
- Object
- ReferenceSystem
- When::TM::Calendar
- Includes:
- Spatial::Normalize, Temporal, Coordinates, When::TimeStandard::TimeBasis
- Defined in:
- lib/when_exe/tmreference.rb
Overview
暦
see gml schema
Direct Known Subclasses
CalendarTypes::EphemerisBased, CalendarTypes::Julian, CalendarTypes::TableBased
Constant Summary
Constants included from Coordinates
Coordinates::Bahai, Coordinates::CommonResidue, Coordinates::DefaultDateIndices, Coordinates::DefaultDayIndex, Coordinates::DefaultTimeIndices, Coordinates::IndianCities, Coordinates::Javanese, Coordinates::MATCH, Coordinates::Mayan, Coordinates::PERIOD, Coordinates::PERIOD_NAME, Coordinates::PRECISION, Coordinates::PRECISION_NAME, Coordinates::Tibetan, Coordinates::VALUE, Coordinates::Yi
Constants included from Parts::Resource
Parts::Resource::LabelProperty
Instance Attribute Summary collapse
-
#reference_frame ⇒ Array<When::TM::CalendarEra>
(also: #referenceFrame)
readonly
この暦と関連付けられた暦年代 (relation - Basis).
-
#time_basis ⇒ Array<When::TM::Clock>
(also: #timeBasis)
readonly
一暦日の中の時間位置を定めるために、この暦とともに使用する時計 (relation - Resolution).
Attributes inherited from ReferenceSystem
#domain_of_validity, #position
Attributes inherited from BasicTypes::Object
Attributes included from Parts::Resource
#_pool, #child, #keys, #locale, #namespace
Class Method Summary collapse
-
._setup_ ⇒ void
初期化.
Instance Method Summary collapse
-
#_new_month_(m) ⇒ Numeric
月初の通日.
-
#_to_month_number_(sdn) ⇒ Array<Numeric>
通日 - > [通月,月内日数,月の日数].
-
#date_trans(cal_date, time = nil, options = {}) ⇒ When::TM::JulianDate
(also: #dateTrans)
日付と時刻をユリウス日(When::TM::JulianDate)に変換する.
-
#jul_trans(jdt, options = {}) ⇒ When::TM::CalDate, When::TM::CalDateAndTime
(also: #julTrans, #^)
ユリウス日(When::TM::JulianDate)を日付に変換する.
-
#rate_of_clock ⇒ Numeric
時間の歩度.
-
#time_standard ⇒ When::TimeStandard?
時刻制 - additional attribute.
-
#to_cal_date(jdn) ⇒ Array<Numeric>
ユリウス日(Numeric)を日付に変換する.
-
#to_julian_date(cal_date) ⇒ Integer
日付をユリウス日(Numeric)に変換する.
-
#to_universal_time(cal_date, clk_time, clock = When.utc) ⇒ Numeric
日付・時刻をUniversal Time(Numeric)に変換する.
Methods included from When::TimeStandard::TimeBasis
Methods included from Coordinates
Methods inherited from ReferenceSystem
Methods included from Parts::Resource
#[], _decode, _encode, _extract_prefix, _instance, _parse, _path_with_prefix, _replace_tags, #each, #enum_for, #hierarchy, #include?, #included?, #iri, #leaf?, #m17n, #map, #next, #parent, #prev, #registered?
Methods included from Parts::Resource::Pool
#[], #[]=, #_pool, #_setup_, #pool_keys
Methods included from Parts::Resource::Synchronize
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class When::Parts::Resource
Instance Attribute Details
#reference_frame ⇒ Array<When::TM::CalendarEra> (readonly) Also known as: referenceFrame
マルチスレッド動作時 CalendarEra の生成で 本属性が更新される 参照・更新処理は synchronize { … } の … の部分に書く必要がある
この暦と関連付けられた暦年代 (relation - Basis)
The calendar eras associated with the calendar being described
128 129 130 |
# File 'lib/when_exe/tmreference.rb', line 128 def reference_frame @reference_frame end |
#time_basis ⇒ Array<When::TM::Clock> (readonly) Also known as: timeBasis
一暦日の中の時間位置を定めるために、この暦とともに使用する時計 (relation - Resolution)
The clock that is used with this calendar to define temporal position within a calendar day
138 139 140 |
# File 'lib/when_exe/tmreference.rb', line 138 def time_basis @time_basis end |
Class Method Details
._setup_ ⇒ void
本メソッドでマルチスレッド対応の管理変数の初期化を行っている。 このため、本メソッド自体はスレッドセーフでない。
This method returns an undefined value.
初期化
113 114 115 116 |
# File 'lib/when_exe/tmreference.rb', line 113 def self._setup_ @_lock_ = Mutex.new if When.multi_thread @_pool = {} end |
Instance Method Details
#_new_month_(m) ⇒ Numeric
月初の通日
259 260 261 262 263 264 265 266 267 268 269 270 271 |
# File 'lib/when_exe/tmreference.rb', line 259 def _new_month_(m) date = @base.map {|d| d||0} if @indices[-2].unit date[-2] += m _coordinates_to_number(*_decode(date)) else d0 = _coordinates_to_number(*_decode(date)) date[-3] += (m * @mean_month / @mean_year).floor - 1 d1 = _coordinates_to_number(*_decode(date)) date[-2] += m - ((d1 - d0) / @mean_month + 0.5).floor _coordinates_to_number(*_decode(date)) end end |
#_to_month_number_(sdn) ⇒ Array<Numeric>
通日 - > [通月,月内日数,月の日数]
282 283 284 |
# File 'lib/when_exe/tmreference.rb', line 282 def _to_month_number_(sdn) Residue.mod(sdn) {|m| _new_month(m)} end |
#date_trans(cal_date, time = nil, options = {}) ⇒ When::TM::JulianDate Also known as: dateTrans
日付と時刻をユリウス日(When::TM::JulianDate)に変換する
164 165 166 167 168 169 |
# File 'lib/when_exe/tmreference.rb', line 164 def date_trans(cal_date, time=nil, ={}) time = cal_date.clk_time if ((time == nil) && cal_date.kind_of?(DateAndTime)) frac = (time) ? time.universal_time : 0.0 jdn = to_julian_date(cal_date.cal_date) return JulianDate.universal_time((jdn - JulianDate::JD19700101) * Duration::DAY + frac, ) end |
#jul_trans(jdt, options = {}) ⇒ When::TM::CalDate, When::TM::CalDateAndTime Also known as: julTrans, ^
ユリウス日(When::TM::JulianDate)を日付に変換する
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 |
# File 'lib/when_exe/tmreference.rb', line 180 def jul_trans(jdt, ={}) = TemporalPosition.() unless jdt.kind_of?(When::TimeValue) [:clock] ||= @time_basis unless rate_of_clock == 1.0 jdt = JulianDate.new(jdt, ) end = jdt._attr .delete(:era_name) .delete(:era) unless rate_of_clock == jdt.time_standard.rate_of_clock .delete(:time_standard) [:clock] = @time_basis || When.utc jdt = JulianDate.dynamical_time(jdt.dynamical_time, {:time_standard=>time_standard}) end .update() [:frame] = self clock = Clock.get_clock_option() || jdt.clock if clock clock = When.Clock(clock) if clock.kind_of?(String) clock = clock._daylight(jdt.universal_time) if clock._need_validate frac = clock.universal_time sdn, time = (jdt.universal_time - frac).divmod(Duration::DAY) [:clock] = clock cal_date = to_cal_date(sdn.to_i + JulianDate::JD19700101) cal_date[0] -= [:era_name][1] if [:era_name] DateAndTime.new(cal_date, time+frac, ) else cal_date = to_cal_date(jdt.to_i) cal_date[0] -= [:era_name][1] if [:era_name] CalDate.new(cal_date, ) end end |
#rate_of_clock ⇒ Numeric
時間の歩度
153 154 155 |
# File 'lib/when_exe/tmreference.rb', line 153 def rate_of_clock @time_basis ? @time_basis.time_standard.rate_of_clock : 1.0 end |
#time_standard ⇒ When::TimeStandard?
時刻制 - additional attribute
145 146 147 |
# File 'lib/when_exe/tmreference.rb', line 145 def time_standard @time_basis ? @time_basis.time_standard : nil end |
#to_cal_date(jdn) ⇒ Array<Numeric>
ユリウス日(Numeric)を日付に変換する
223 224 225 |
# File 'lib/when_exe/tmreference.rb', line 223 def to_cal_date(jdn) _encode(_number_to_coordinates(jdn)) end |
#to_julian_date(cal_date) ⇒ Integer
日付をユリウス日(Numeric)に変換する
233 234 235 236 237 |
# File 'lib/when_exe/tmreference.rb', line 233 def to_julian_date(cal_date) date = _decode(cal_date) date[0] = +date[0] _coordinates_to_number(*date) end |
#to_universal_time(cal_date, clk_time, clock = When.utc) ⇒ Numeric
日付・時刻をUniversal Time(Numeric)に変換する
247 248 249 250 251 |
# File 'lib/when_exe/tmreference.rb', line 247 def to_universal_time(cal_date, clk_time, clock=When.utc) time = clk_time.dup time[0] += _coordinates_to_number(*_decode(cal_date)) clock.to_universal_time(time) - When::TM::JulianDate::JD19700101 * When::TM::Duration::DAY end |