Class: When::TM::Calendar
- Inherits:
-
ReferenceSystem
- Object
- BasicTypes::Object
- Object
- ReferenceSystem
- When::TM::Calendar
- Includes:
- Temporal, Coordinates
- 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::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, #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) ⇒ Numeric
ユリウス日(Numeric)を日付に変換する.
-
#to_julian_date(cal_date) ⇒ Integer
日付をユリウス日(Numeric)に変換する.
Methods included from Coordinates
Methods inherited from ReferenceSystem
Methods inherited from BasicTypes::Object
Methods included from Parts::Resource
#[], _extract_prefix, _instance, _parse, _path_with_prefix, #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
127 128 129 |
# File 'lib/when_exe/tmreference.rb', line 127 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
137 138 139 |
# File 'lib/when_exe/tmreference.rb', line 137 def time_basis @time_basis end |
Class Method Details
._setup_ ⇒ void
本メソッドでマルチスレッド対応の管理変数の初期化を行っている。このため、本メソッド自体はスレッドセーフでない。
This method returns an undefined value.
初期化
112 113 114 115 |
# File 'lib/when_exe/tmreference.rb', line 112 def self._setup_ @_lock_ = Mutex.new if When.multi_thread @_pool = {} end |
Instance Method Details
#_new_month_(m) ⇒ Numeric
月初の通日
236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/when_exe/tmreference.rb', line 236 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>
通日 - > [通月,月内日数,月の日数]
259 260 261 |
# File 'lib/when_exe/tmreference.rb', line 259 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)に変換する
163 164 165 166 167 168 |
# File 'lib/when_exe/tmreference.rb', line 163 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)を日付に変換する
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 |
# File 'lib/when_exe/tmreference.rb', line 179 def jul_trans(jdt, ={}) 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 cal_date = to_cal_date(jdt.to_i) cal_date[0] -= [:era_name][1] if [:era_name] clock = @time_basis || Clock.get_clock_option() || jdt.clock return CalDate.new(cal_date, ) unless clock clock = When.Clock(clock) if clock.kind_of?(String) clock = clock._daylight(jdt) if clock._need_validate frac = clock.universal_time sdn, time = (jdt.universal_time - frac).divmod(Duration::DAY) [:clock] = clock return DateAndTime.new(to_cal_date(sdn.to_i + JulianDate::JD19700101), time+frac, ) end |
#rate_of_clock ⇒ Numeric
時間の歩度
152 153 154 |
# File 'lib/when_exe/tmreference.rb', line 152 def rate_of_clock @time_basis ? @time_basis.time_standard.rate_of_clock : 1.0 end |
#time_standard ⇒ When::TimeStandard?
時刻制 - additional attribute
144 145 146 |
# File 'lib/when_exe/tmreference.rb', line 144 def time_standard @time_basis ? @time_basis.time_standard : nil end |
#to_cal_date(jdn) ⇒ Numeric
ユリウス日(Numeric)を日付に変換する
226 227 228 |
# File 'lib/when_exe/tmreference.rb', line 226 def to_cal_date(jdn) return _encode(_number_to_coordinates(jdn)) end |
#to_julian_date(cal_date) ⇒ Integer
日付をユリウス日(Numeric)に変換する
214 215 216 217 218 |
# File 'lib/when_exe/tmreference.rb', line 214 def to_julian_date(cal_date) date = _decode(cal_date) date[0] = +date[0] return _coordinates_to_number(*date) end |