Class: When::TM::Clock
- Inherits:
-
ReferenceSystem
- Object
- BasicTypes::Object
- Object
- ReferenceSystem
- When::TM::Clock
- Extended by:
- Parts::Resource::Pool
- Includes:
- Spatial::Normalize, Temporal, Coordinates, Parts::Timezone::Base
- Defined in:
- lib/when_exe/tmreference.rb
Overview
時計
see gml schema
Direct Known Subclasses
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
-
#date_basis ⇒ Array<When::TM::Calendar>
(also: #dateBasis)
readonly
一暦日の中の時間位置を定めるために、この時計とともに使用する暦 (relation - Resolution).
-
#reference_event ⇒ String
(also: #referenceEvent)
readonly
この時法の基点となる事象.
-
#reference_time ⇒ When::TM::ClockTime
(also: #referenceTime)
readonly
この時法による参照事象の時刻.
-
#second ⇒ Numeric
readonly
universal_timeとこの時法の最小単位との比 - additional attribute.
-
#time_standard ⇒ When::TimeStandard
readonly
時刻制 - additional attribute.
-
#tz_prop ⇒ When::V::TimezoneProperty
(also: #tzProp)
この時法を生成した時間帯プロパティ - additional attribute.
-
#utc_reference ⇒ When::TM::ClockTime
(also: #utcReference)
readonly
UTCによる参照事象の時刻.
-
#zone ⇒ String
(also: #to_extended)
readonly
この時法のUTCとの差(ISO 8601 extended format) - additional attribute.
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
-
._local_time ⇒ Object
共通処理.
-
._setup_(local = nil) ⇒ void
When::TM::Clock Class のグローバルな設定を行う.
-
._setup_info ⇒ Hash
設定情報を取得する.
- .get_clock(options) ⇒ Object
- .get_clock_option(options) ⇒ Object
-
.is_local_time_set? ⇒ true, false
When::TM::Clock のローカルタイムが設定されているか?.
-
.local_time ⇒ When::Parts::Timezone::Base
When::TM::Clock のローカルタイムを読みだす.
-
.local_time=(local) ⇒ When::Parts::Timezone::Base, String
地方時.
- .to_hms(hms, extended = true) ⇒ Object
Instance Method Summary collapse
-
#_arrange_length(period) ⇒ Object
期間オブジェクトの桁数合わせ.
-
#_coordinates_to_number(clk_time) ⇒ Numeric
時刻をNumeric(serial time)に変換する.
-
#_daylight(time) ⇒ Object
夏時間.
-
#_need_validate ⇒ Object
夏時間の有無.
-
#_number_to_coordinates(serial_time) ⇒ Numeric
Numeric(serial time)を時刻に変換する.
-
#_precision(time, default = nil) ⇒ Object
時刻配列の分解能.
-
#_round_value(precision) ⇒ Object
丸め量 / When::TM::Duration::SYSTEM.
-
#_to_hash_value(options = {}) ⇒ Object
_m17n_form のための要素生成.
-
#clk_trans(clk_time) ⇒ When::TM::ClockTime
(also: #clkTrans)
UTC時刻をこの時法の時刻に変換する.
-
#daylight ⇒ When::TM::Clock
夏時間帯の時計.
-
#rate_of_clock ⇒ Numeric
時間の歩度.
-
#standard ⇒ When::TM::Clock
標準時間帯の時計.
-
#to_basic ⇒ String
この時法のUTCとの差(ISO 8601 basic format).
-
#to_clk_time(fod, options = {}) ⇒ When::TM::ClockTime
128秒単位の実数をこの時法の時刻に変換する.
-
#to_universal_time(clk_time) ⇒ Numeric
この時法の時刻を128秒単位の実数に変換する.
-
#tz_difference ⇒ When::TM:IntervalLength
夏時間帯と標準時間帯の時間差.
-
#tzname(format = :extended) ⇒ Array<String>
この時法の時間帯名.
-
#universal_time(sdn = nil) ⇒ Numeric
128秒単位の実数による参照事象の時刻.
-
#utc_trans(u_time) ⇒ When::TM::ClockTime
(also: #utcTrans)
この時法の時刻をUTC時刻に変換する.
Methods included from Parts::Resource::Pool
[], []=, _pool, _setup_, pool_keys
Methods included from Parts::Resource::Synchronize
Methods included from Parts::Timezone::Base
Methods included from Coordinates
Methods inherited from ReferenceSystem
Methods included from Parts::Resource
#[], #^, _decode, _encode, _extract_prefix, _instance, _instantiate, _parse, _path_with_prefix, _replace_tags, _simplify_path, base_uri, #each, #enum_for, #hierarchy, #include?, #included?, #iri, #leaf?, #m17n, #map, #next, #parent, #prev, #registered?, root_dir
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class When::Parts::Resource
Instance Attribute Details
#date_basis ⇒ Array<When::TM::Calendar> (readonly) Also known as: dateBasis
一暦日の中の時間位置を定めるために、この時計とともに使用する暦 (relation - Resolution)
The calendar that is used with this clock to define temporal position within a calendar day
471 472 473 |
# File 'lib/when_exe/tmreference.rb', line 471 def date_basis @date_basis end |
#reference_event ⇒ String (readonly) Also known as: referenceEvent
new の options 引数に :reference_event があれば設定される。 ライブラリとしては本変数を参照していない。下記の振る舞いを String で説明するため用いてもよい。
日付の境界が午前0時でない場合、When::Coordinates::Temporal.border により、境界が指定される。 border, behavior メソッドをオーバーライドすることで、日の出、日の入りなど event 時刻が一定 しない場合にも対応する。
この時法の基点となる事象
Event used as the datum for this clock
443 444 445 |
# File 'lib/when_exe/tmreference.rb', line 443 def reference_event @reference_event end |
#reference_time ⇒ When::TM::ClockTime (readonly) Also known as: referenceTime
この時法による参照事象の時刻
Time of the reference event for this clock
452 453 454 |
# File 'lib/when_exe/tmreference.rb', line 452 def reference_time @reference_time end |
#second ⇒ Numeric (readonly)
universal_timeとこの時法の最小単位との比 - additional attribute
495 496 497 |
# File 'lib/when_exe/tmreference.rb', line 495 def second @second end |
#time_standard ⇒ When::TimeStandard (readonly)
時刻制 - additional attribute
478 479 480 |
# File 'lib/when_exe/tmreference.rb', line 478 def time_standard @time_standard end |
#tz_prop ⇒ When::V::TimezoneProperty Also known as: tzProp
When::TM::TemporalPosition に対して加減算を行うと、時間帯が変わる可能性がある。 本変数により、時間帯決定ルール(When::V::TimezoneProperty#rrule)を参照する。
この時法を生成した時間帯プロパティ - additional attribute
488 489 490 |
# File 'lib/when_exe/tmreference.rb', line 488 def tz_prop @tz_prop end |
#utc_reference ⇒ When::TM::ClockTime (readonly) Also known as: utcReference
UTCによる参照事象の時刻
UTC time of the reference event
461 462 463 |
# File 'lib/when_exe/tmreference.rb', line 461 def utc_reference @utc_reference end |
#zone ⇒ String (readonly) Also known as: to_extended
この時法のUTCとの差(ISO 8601 extended format) - additional attribute
501 502 503 |
# File 'lib/when_exe/tmreference.rb', line 501 def zone @zone end |
Class Method Details
._local_time ⇒ Object
共通処理
371 372 373 374 375 376 377 378 379 380 |
# File 'lib/when_exe/tmreference.rb', line 371 def _local_time case @local_time when Array ; @local_time when nil ; @local_time = [false, When.utc] when String ; @local_time = [true, When::Parts::Timezone[@local_time] || When::V::Timezone[@local_time] || When.Clock(@local_time)] else ; @local_time = [true, @local_time] end end |
._setup_(local = nil) ⇒ void
本メソッドでマルチスレッド対応の管理変数の初期化を行っている。 このため、本メソッド自体はスレッドセーフでない。
This method returns an undefined value.
When::TM::Clock Class のグローバルな設定を行う
322 323 324 325 326 |
# File 'lib/when_exe/tmreference.rb', line 322 def _setup_(local=nil) @_lock_ = Mutex.new if When.multi_thread @_pool = {} @local_time = local end |
._setup_info ⇒ Hash
設定情報を取得する
332 333 334 |
# File 'lib/when_exe/tmreference.rb', line 332 def _setup_info {:local => _local_time} end |
.get_clock(options) ⇒ Object
384 385 386 |
# File 'lib/when_exe/tmreference.rb', line 384 def get_clock() get_clock_option() || local_time end |
.get_clock_option(options) ⇒ Object
389 390 391 392 393 |
# File 'lib/when_exe/tmreference.rb', line 389 def get_clock_option() clock = .delete(:clock) tz = .delete(:tz) tz ? (When::V::Timezone[tz] || When::Parts::Timezone[tz]) : clock end |
.is_local_time_set? ⇒ true, false
When::TM::Clock のローカルタイムが設定されているか?
366 367 368 |
# File 'lib/when_exe/tmreference.rb', line 366 def is_local_time_set? _local_time[0] end |
.local_time ⇒ When::Parts::Timezone::Base
When::TM::Clock のローカルタイムを読みだす
358 359 360 |
# File 'lib/when_exe/tmreference.rb', line 358 def local_time _local_time[1] end |
.local_time=(local) ⇒ When::Parts::Timezone::Base, String
@local_timeは、原則、ライブラリ立ち上げ時に setup で初期化する。 以降、@local_timeに代入を行っても、すでに生成した When::TM::TemporalPosition 等には反映されない。
地方時
346 347 348 349 350 351 352 |
# File 'lib/when_exe/tmreference.rb', line 346 def local_time=(local) if @_pool @local_time = local else _setup_(local) end end |
.to_hms(hms, extended = true) ⇒ Object
396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 |
# File 'lib/when_exe/tmreference.rb', line 396 def to_hms(hms, extended=true) case hms when Numeric sgn = (hms >= 0) ? '+' : '-' hh, mm = hms.abs.divmod(3600) mm, ss = mm.divmod(60) ss, ff = ss.divmod(1) ff = (ff == 0 || When::STRING <= When::SECOND) ? '' : ("%.#{When::STRING - When::SECOND}f" % ff)[1..-1] ss = (ss == 0 && ff == '') ? '' : ("%02d" % ss) mm = "%02d" % mm hh = "%02d" % hh when /^([-+])(\d{2})([:=*])?(\d{2})?([:=*])?(\d{2})?(\.\d+)?$/ sgn, hh, d1, mm, d2, ss, ff = $~[1..7] ff ||= '' ss ||= '' mm ||= '' else return nil end if (extended) d1 ||= (mm=='') ? '' : ':' d2 ||= (ss=='') ? '' : ':' else d1 = '' d2 = '' end sgn + hh + d1 + mm + d2 + ss + ff end |
Instance Method Details
#_arrange_length(period) ⇒ Object
期間オブジェクトの桁数合わせ
627 628 629 630 631 632 |
# File 'lib/when_exe/tmreference.rb', line 627 def _arrange_length(period) return period unless period.kind_of?(Array) diff = @indices.length - period.length + 1 return period if (diff == 0) return (diff > 0) ? period + Array.new(diff, 0) : period[0...diff] end |
#_coordinates_to_number(clk_time) ⇒ Numeric
時刻をNumeric(serial time)に変換する
579 580 581 582 583 584 585 586 587 |
# File 'lib/when_exe/tmreference.rb', line 579 def _coordinates_to_number(clk_time) u = 1 s = 0 (@base.length-1).downto(1) do |i| s += u * (+clk_time[i] - @base[i]) if (clk_time[i]) u *= @unit[i] end return s + u * (+clk_time[0]) + @origin_of_LSC end |
#_daylight(time) ⇒ Object
夏時間
704 705 706 |
# File 'lib/when_exe/tmreference.rb', line 704 def _daylight(time) _tz_prop ? _tz_prop._daylight(time) : self end |
#_need_validate ⇒ Object
夏時間の有無
698 699 700 |
# File 'lib/when_exe/tmreference.rb', line 698 def _need_validate _tz_prop ? _tz_prop._need_validate : false end |
#_number_to_coordinates(serial_time) ⇒ Numeric
Numeric(serial time)を時刻に変換する
595 596 597 598 599 600 601 602 603 |
# File 'lib/when_exe/tmreference.rb', line 595 def _number_to_coordinates(serial_time) time = [serial_time-@origin_of_LSC] (@base.length-1).downto(1) do |i| carry, time[0] = (+time[0]).divmod(@unit[i]) time[0] += @base[i] time.unshift(carry) end return time end |
#_precision(time, default = nil) ⇒ Object
時刻配列の分解能
636 637 638 639 640 |
# File 'lib/when_exe/tmreference.rb', line 636 def _precision(time, default=nil) nil_index = time.index(nil) || time.length precision = nil_index - 1 if (nil_index < @base.length || time[-1].kind_of?(Integer)) When::Coordinates::Index.precision(default || precision) end |
#_round_value(precision) ⇒ Object
丸め量 / When::TM::Duration::SYSTEM
644 645 646 647 648 649 650 |
# File 'lib/when_exe/tmreference.rb', line 644 def _round_value(precision) offset = When::TM::Duration::DAY / 2 precision.times do |i| offset /= @unit[i+1] ? @unit[i+1] : 10 end offset end |
#_to_hash_value(options = {}) ⇒ Object
_m17n_form のための要素生成
612 613 614 |
# File 'lib/when_exe/tmreference.rb', line 612 def _to_hash_value(={}) [:method] == :to_m17n ? tzname(:hash)[0] : super end |
#clk_trans(clk_time) ⇒ When::TM::ClockTime Also known as: clkTrans
UTC時刻をこの時法の時刻に変換する
543 544 545 |
# File 'lib/when_exe/tmreference.rb', line 543 def clk_trans(clk_time) return self.to_clk_time(When.utc.to_universal_time(u_time.clk_time)) end |
#daylight ⇒ When::TM::Clock
夏時間帯の時計
686 687 688 |
# File 'lib/when_exe/tmreference.rb', line 686 def daylight _tz_prop ? _tz_prop.daylight : self end |
#rate_of_clock ⇒ Numeric
時間の歩度
508 509 510 |
# File 'lib/when_exe/tmreference.rb', line 508 def rate_of_clock @time_standard.rate_of_clock end |
#standard ⇒ When::TM::Clock
標準時間帯の時計
680 681 682 |
# File 'lib/when_exe/tmreference.rb', line 680 def standard _tz_prop ? _tz_prop.standard : self end |
#to_basic ⇒ String
この時法のUTCとの差(ISO 8601 basic format)
620 621 622 623 |
# File 'lib/when_exe/tmreference.rb', line 620 def to_basic return '' unless @zone @zone.gsub(/:/, '') end |
#to_clk_time(fod, options = {}) ⇒ When::TM::ClockTime
128秒単位の実数をこの時法の時刻に変換する
564 565 566 567 568 569 570 571 |
# File 'lib/when_exe/tmreference.rb', line 564 def to_clk_time(fod, ={}) [:frame] = self fod, second = fod.trunk, fod.branch / fod.second if fod.kind_of?(When::Coordinates::LeapSeconds) clk_time = ClockTime.new(_encode(_number_to_coordinates(fod * @second)), ) return clk_time if (second||0) == 0 clk_time.clk_time[-1] += second return clk_time end |
#to_universal_time(clk_time) ⇒ Numeric
この時法の時刻を128秒単位の実数に変換する
554 555 556 |
# File 'lib/when_exe/tmreference.rb', line 554 def to_universal_time(clk_time) return _coordinates_to_number(_decode(clk_time)) / @second end |
#tz_difference ⇒ When::TM:IntervalLength
夏時間帯と標準時間帯の時間差
692 693 694 |
# File 'lib/when_exe/tmreference.rb', line 692 def tz_difference _tz_prop ? _tz_prop.tz_difference : 0 end |
#tzname(format = :extended) ⇒ Array<String>
:extended または :basicが指定され、上記は時間帯名が定義されていない場合は、ISO 8601形式で返す
この時法の時間帯名
664 665 666 667 668 669 670 671 672 673 674 675 676 |
# File 'lib/when_exe/tmreference.rb', line 664 def tzname(format=:extended) name = @tz_prop.tzname if @tz_prop.kind_of?(When::V::TimezoneProperty) && format != :hash name ||= format == :basic ? to_basic : @zone name = Array(name) return name unless format == :hash tzid = case @tz_prop when When::V::TimezoneProperty ; @tz_prop['..'].property['tzid'].object when When::Parts::Timezone ; @tz_prop.timezone.name else ; '' end name[0] = tzid + name[0] name end |
#universal_time(sdn = nil) ⇒ Numeric
128秒単位の実数による参照事象の時刻
Fraction time of the reference event
522 523 524 |
# File 'lib/when_exe/tmreference.rb', line 522 def universal_time(sdn=nil) return @utc_reference.universal_time end |
#utc_trans(u_time) ⇒ When::TM::ClockTime Also known as: utcTrans
この時法の時刻をUTC時刻に変換する
532 533 534 |
# File 'lib/when_exe/tmreference.rb', line 532 def utc_trans(u_time) return When.utc.to_clk_time(self.to_universal_time(u_time.clk_time)) end |