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::Common, Coordinates::DefaultDateIndices, Coordinates::DefaultDayIndex, Coordinates::DefaultTimeIndices, Coordinates::Indian, Coordinates::Iranian, 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::ConstList, Parts::Resource::ConstTypes, Parts::Resource::IRIHeader, 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
夏時間帯の時計.
-
#location ⇒ When::Coordinates::Spatial
時間帯を代表する空間位置.
-
#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, sdn = nil) ⇒ Numeric
(also: #to_local_time)
この時法の時刻を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
#[], #^, _abbreviation_to_iri, _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
494 495 496 |
# File 'lib/when_exe/tmreference.rb', line 494 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
466 467 468 |
# File 'lib/when_exe/tmreference.rb', line 466 def reference_event @reference_event end |
#reference_time ⇒ When::TM::ClockTime (readonly) Also known as: referenceTime
この時法による参照事象の時刻
Time of the reference event for this clock
475 476 477 |
# File 'lib/when_exe/tmreference.rb', line 475 def reference_time @reference_time end |
#second ⇒ Numeric (readonly)
universal_timeとこの時法の最小単位との比 - additional attribute
518 519 520 |
# File 'lib/when_exe/tmreference.rb', line 518 def second @second end |
#time_standard ⇒ When::TimeStandard (readonly)
時刻制 - additional attribute
501 502 503 |
# File 'lib/when_exe/tmreference.rb', line 501 def time_standard @time_standard end |
#tz_prop ⇒ When::V::TimezoneProperty Also known as: tzProp
When::TM::TemporalPosition に対して加減算を行うと、時間帯が変わる可能性がある。 本変数により、時間帯決定ルール(When::V::TimezoneProperty#rrule)を参照する。
この時法を生成した時間帯プロパティ - additional attribute
511 512 513 |
# File 'lib/when_exe/tmreference.rb', line 511 def tz_prop @tz_prop end |
#utc_reference ⇒ When::TM::ClockTime (readonly) Also known as: utcReference
UTCによる参照事象の時刻
UTC time of the reference event
484 485 486 |
# File 'lib/when_exe/tmreference.rb', line 484 def utc_reference @utc_reference end |
#zone ⇒ String (readonly) Also known as: to_extended
この時法のUTCとの差(ISO 8601 extended format) - additional attribute
524 525 526 |
# File 'lib/when_exe/tmreference.rb', line 524 def zone @zone end |
Class Method Details
._local_time ⇒ Object
共通処理
394 395 396 397 398 399 400 401 402 403 |
# File 'lib/when_exe/tmreference.rb', line 394 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 のグローバルな設定を行う
345 346 347 348 349 |
# File 'lib/when_exe/tmreference.rb', line 345 def _setup_(local=nil) @_lock_ = Mutex.new if When.multi_thread @_pool = {} @local_time = local end |
._setup_info ⇒ Hash
設定情報を取得する
355 356 357 |
# File 'lib/when_exe/tmreference.rb', line 355 def _setup_info {:local => _local_time} end |
.get_clock(options) ⇒ Object
407 408 409 |
# File 'lib/when_exe/tmreference.rb', line 407 def get_clock() get_clock_option() || local_time end |
.get_clock_option(options) ⇒ Object
412 413 414 415 416 |
# File 'lib/when_exe/tmreference.rb', line 412 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 のローカルタイムが設定されているか?
389 390 391 |
# File 'lib/when_exe/tmreference.rb', line 389 def is_local_time_set? _local_time[0] end |
.local_time ⇒ When::Parts::Timezone::Base
When::TM::Clock のローカルタイムを読みだす
381 382 383 |
# File 'lib/when_exe/tmreference.rb', line 381 def local_time _local_time[1] end |
.local_time=(local) ⇒ When::Parts::Timezone::Base, String
@local_timeは、原則、ライブラリ立ち上げ時に setup で初期化する。 以降、@local_timeに代入を行っても、すでに生成した When::TM::TemporalPosition 等には反映されない。
地方時
369 370 371 372 373 374 375 |
# File 'lib/when_exe/tmreference.rb', line 369 def local_time=(local) if @_pool @local_time = local else _setup_(local) end end |
.to_hms(hms, extended = true) ⇒ Object
419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 |
# File 'lib/when_exe/tmreference.rb', line 419 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 /\A([-+])(\d{2})([:=*])?(\d{2})?([:=*])?(\d{2})?(\.\d+)?\z/ 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
期間オブジェクトの桁数合わせ
652 653 654 655 656 657 |
# File 'lib/when_exe/tmreference.rb', line 652 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)に変換する
604 605 606 607 608 609 610 611 612 |
# File 'lib/when_exe/tmreference.rb', line 604 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
夏時間
736 737 738 |
# File 'lib/when_exe/tmreference.rb', line 736 def _daylight(time) _tz_prop ? _tz_prop._daylight(time) : self end |
#_need_validate ⇒ Object
夏時間の有無
730 731 732 |
# File 'lib/when_exe/tmreference.rb', line 730 def _need_validate _tz_prop ? _tz_prop._need_validate : false end |
#_number_to_coordinates(serial_time) ⇒ Numeric
Numeric(serial time)を時刻に変換する
620 621 622 623 624 625 626 627 628 |
# File 'lib/when_exe/tmreference.rb', line 620 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
時刻配列の分解能
661 662 663 664 665 |
# File 'lib/when_exe/tmreference.rb', line 661 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
669 670 671 672 673 674 675 |
# File 'lib/when_exe/tmreference.rb', line 669 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 のための要素生成
637 638 639 |
# File 'lib/when_exe/tmreference.rb', line 637 def _to_hash_value(={}) [:method] == :to_m17n ? tzname(:hash)[0] : super end |
#clk_trans(clk_time) ⇒ When::TM::ClockTime Also known as: clkTrans
UTC時刻をこの時法の時刻に変換する
566 567 568 |
# File 'lib/when_exe/tmreference.rb', line 566 def clk_trans(clk_time) return self.to_clk_time(When::UTC.to_universal_time(u_time.clk_time)) end |
#daylight ⇒ When::TM::Clock
夏時間帯の時計
718 719 720 |
# File 'lib/when_exe/tmreference.rb', line 718 def daylight _tz_prop ? _tz_prop.daylight : self end |
#location ⇒ When::Coordinates::Spatial
時間帯を代表する空間位置
705 706 707 708 |
# File 'lib/when_exe/tmreference.rb', line 705 def location @location ||= @tz_prop.kind_of?(When::Parts::Timezone) ? @tz_prop.location : When::Coordinates::Spatial.default_location end |
#rate_of_clock ⇒ Numeric
時間の歩度
531 532 533 |
# File 'lib/when_exe/tmreference.rb', line 531 def rate_of_clock @time_standard.rate_of_clock end |
#standard ⇒ When::TM::Clock
標準時間帯の時計
712 713 714 |
# File 'lib/when_exe/tmreference.rb', line 712 def standard _tz_prop ? _tz_prop.standard : self end |
#to_basic ⇒ String
この時法のUTCとの差(ISO 8601 basic format)
645 646 647 648 |
# File 'lib/when_exe/tmreference.rb', line 645 def to_basic return '' unless @zone @zone.gsub(/:/, '') end |
#to_clk_time(fod, options = {}) ⇒ When::TM::ClockTime
128秒単位の実数をこの時法の時刻に変換する
589 590 591 592 593 594 595 596 |
# File 'lib/when_exe/tmreference.rb', line 589 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, sdn = nil) ⇒ Numeric Also known as: to_local_time
この時法の時刻を128秒単位の実数に変換する
578 579 580 |
# File 'lib/when_exe/tmreference.rb', line 578 def to_universal_time(clk_time, sdn=nil) return _coordinates_to_number(_decode(clk_time)) / @second end |
#tz_difference ⇒ When::TM:IntervalLength
夏時間帯と標準時間帯の時間差
724 725 726 |
# File 'lib/when_exe/tmreference.rb', line 724 def tz_difference _tz_prop ? _tz_prop.tz_difference : 0 end |
#tzname(format = :extended) ⇒ Array<String>
:extended または :basicが指定され、上記は時間帯名が定義されていない場合は、ISO 8601形式で返す
この時法の時間帯名
689 690 691 692 693 694 695 696 697 698 699 700 701 |
# File 'lib/when_exe/tmreference.rb', line 689 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
545 546 547 |
# File 'lib/when_exe/tmreference.rb', line 545 def universal_time(sdn=nil) return @utc_reference.universal_time end |
#utc_trans(u_time) ⇒ When::TM::ClockTime Also known as: utcTrans
この時法の時刻をUTC時刻に変換する
555 556 557 |
# File 'lib/when_exe/tmreference.rb', line 555 def utc_trans(u_time) return When::UTC.to_clk_time(self.to_universal_time(u_time.clk_time)) end |