Class: When::TM::Calendar

Inherits:
ReferenceSystem show all
Includes:
Spatial::Normalize, Temporal, Coordinates
Defined in:
lib/when_exe/tmreference.rb,
lib/when_exe/inspect.rb

Overview

see gml schema

Constant Summary

Constants included from Coordinates

Coordinates::Bahai, Coordinates::Chinese, Coordinates::Common, Coordinates::DefaultDateIndices, Coordinates::DefaultDayIndex, Coordinates::DefaultTimeIndices, Coordinates::Indian, Coordinates::Iranian, Coordinates::Javanese, Coordinates::LocationTable, Coordinates::MATCH, Coordinates::Mayan, Coordinates::PERIOD, Coordinates::PERIOD_NAME, Coordinates::PRECISION, Coordinates::PRECISION_NAME, Coordinates::Russian, Coordinates::Tibetan, Coordinates::VALUE, Coordinates::Yi

Constants included from Namespace

Namespace::DC, Namespace::DCQ, Namespace::DCT, Namespace::FOAF, Namespace::OWL, Namespace::RDF, Namespace::RDFC, Namespace::RDFS, Namespace::RSS, Namespace::XSD

Instance Attribute Summary collapse

Attributes inherited from ReferenceSystem

#domain_of_validity, #position

Attributes inherited from BasicTypes::Object

#label

Attributes included from Parts::Resource

#child, #keys, #locale, #namespace

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Coordinates

to_deg, to_deg_225, to_dms

Methods inherited from ReferenceSystem

#domain, #name

Methods included from Parts::Resource

#[], _instance, _setup_info, base_uri, #each, #enum_for, #hierarchy, #include?, #included?, #iri, #leaf?, #m17n, #map, #parent, #registered?, root_dir

Methods included from Parts::Resource::Pool

#[], #[]=, #_setup_

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class When::Parts::Resource

Instance Attribute Details

#epoch_in_CENumeric (readonly)

西暦との年次の相違(外部表現の0年に対応する西暦年) - additional attribute

Returns:



164
165
166
# File 'lib/when_exe/tmreference.rb', line 164

def epoch_in_CE
  @epoch_in_CE
end

#reference_frameArray<When::TM::CalendarEra> (readonly) Also known as: referenceFrame

Note:

マルチスレッド動作時 CalendarEra の生成で 本属性が更新される 参照・更新処理は synchronize { … } の … の部分に書く必要がある

この暦と関連付けられた暦年代 (relation - Basis)

The calendar eras associated with the calendar being described



131
132
133
# File 'lib/when_exe/tmreference.rb', line 131

def reference_frame
  @reference_frame
end

#time_basisArray<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

Returns:



141
142
143
# File 'lib/when_exe/tmreference.rb', line 141

def time_basis
  @time_basis
end

Class Method Details

._setup_void

Note:

本メソッドでマルチスレッド対応の管理変数の初期化を行っている。 このため、本メソッド自体はスレッドセーフでない。

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

月初の通日

Parameters:

  • m (Integer)

    通月

Returns:



275
276
277
278
279
280
281
282
283
284
285
286
287
# File 'lib/when_exe/tmreference.rb', line 275

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>

通日 - > [通月,月内日数,月の日数]

Parameters:

  • sdn (Integer)

    通日

Returns:

  • (Array<Numeric>)

    ( m, d, n )

    m - 通月
    d - 月内の日数 (0 始まり)
    n - 月の日数


298
299
300
# File 'lib/when_exe/tmreference.rb', line 298

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)に変換する

Parameters:

Returns:



180
181
182
183
184
185
# File 'lib/when_exe/tmreference.rb', line 180

def date_trans(cal_date, time=nil, options={})
  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, options)
end

#jul_trans(jdt, options = {}) ⇒ When::TM::CalDate, When::TM::CalDateAndTime Also known as: julTrans, ^

ユリウス日(When::TM::JulianDate)を日付に変換する

Parameters:

Returns:

  • (When::TM::CalDate)

    if (options[:clock or :tz] == nil)

  • (When::TM::CalDateAndTime)

    if (options[:clock or :tz] != nil)



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
# File 'lib/when_exe/tmreference.rb', line 196

def jul_trans(jdt, options={})
  options = TemporalPosition._options(options)
  unless jdt.kind_of?(When::TimeValue)
    options[:clock] ||= @time_basis unless rate_of_clock == 1.0
    jdt = JulianDate.new(jdt, options)
  end
  cal_options = jdt._attr
  cal_options.delete(:era_name)
  cal_options.delete(:era)
  unless rate_of_clock == jdt.time_standard.rate_of_clock
    cal_options.delete(:time_standard)
    cal_options[:clock] = @time_basis || When::UTC
    jdt = JulianDate.dynamical_time(jdt.dynamical_time, {:time_standard=>time_standard})
  end

  cal_options.update(options)
  cal_options[:frame] = self
  clock = Clock.get_clock_option(cal_options) || 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(jdt.to_i)
    sdn, time = (jdt.universal_time - frac).divmod(Duration::DAY)
    cal_options[:clock] = clock
    cal_date = to_cal_date(sdn.to_i + JulianDate::JD19700101)
    cal_date[0] -= cal_options[:era_name][1] if cal_options[:era_name]
    DateAndTime.new(cal_date, time+frac, cal_options)
  else
    cal_date     = to_cal_date(jdt.to_i)
    cal_date[0] -= cal_options[:era_name][1] if cal_options[:era_name]
    CalDate.new(cal_date, cal_options)
  end
end

#rate_of_clockNumeric

時間の歩度

Returns:



156
157
158
# File 'lib/when_exe/tmreference.rb', line 156

def rate_of_clock
  @time_basis ? @time_basis.time_standard.rate_of_clock : 1.0
end

#strftimeString

TemporalPosition#strftime のためのデフォルト書式

Returns:



295
296
297
# File 'lib/when_exe/inspect.rb', line 295

def strftime
  @strftime ||= '%Y-%m-%d'
end

#time_standardWhen::TimeStandard?

時刻制 - additional attribute

Returns:



148
149
150
# File 'lib/when_exe/tmreference.rb', line 148

def time_standard
  @time_basis ? @time_basis.time_standard : nil
end

#to_cal_date(jdn) ⇒ Array<Numeric>

ユリウス日(Numeric)を日付に変換する

Parameters:

  • jdn (Integer)

Returns:



239
240
241
# File 'lib/when_exe/tmreference.rb', line 239

def to_cal_date(jdn)
  _encode(_number_to_coordinates(jdn))
end

#to_julian_date(cal_date) ⇒ Integer

日付をユリウス日(Numeric)に変換する

Parameters:

Returns:

  • (Integer)

    JulianDate



249
250
251
252
253
# File 'lib/when_exe/tmreference.rb', line 249

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)に変換する

Parameters:

Returns:



263
264
265
266
267
# File 'lib/when_exe/tmreference.rb', line 263

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