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,
lib/when_exe/linkeddata.rb
Overview
When::TM::Clock への追加
Direct Known Subclasses
Constant Summary collapse
- HashProperty =
[:label, :referenceEvent, :referenceTime, :utcReference, :dateBasis]
Constants included from Coordinates
Coordinates::Bahai, Coordinates::Chinese, 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::Russian, Coordinates::Tibetan, Coordinates::VALUE, Coordinates::Yi
Constants included from Parts::Resource
Parts::Resource::ConstList, Parts::Resource::ConstTypes, Parts::Resource::IRIDecode, Parts::Resource::IRIDecodeTable, Parts::Resource::IRIEncode, Parts::Resource::IRIEncodeTable, 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
500 501 502 |
# File 'lib/when_exe/tmreference.rb', line 500 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
472 473 474 |
# File 'lib/when_exe/tmreference.rb', line 472 def reference_event @reference_event end |
#reference_time ⇒ When::TM::ClockTime (readonly) Also known as: referenceTime
この時法による参照事象の時刻
Time of the reference event for this clock
481 482 483 |
# File 'lib/when_exe/tmreference.rb', line 481 def reference_time @reference_time end |
#second ⇒ Numeric (readonly)
universal_timeとこの時法の最小単位との比 - additional attribute
524 525 526 |
# File 'lib/when_exe/tmreference.rb', line 524 def second @second end |
#time_standard ⇒ When::TimeStandard (readonly)
時刻制 - additional attribute
507 508 509 |
# File 'lib/when_exe/tmreference.rb', line 507 def time_standard @time_standard end |
#tz_prop ⇒ When::V::TimezoneProperty Also known as: tzProp
When::TM::TemporalPosition に対して加減算を行うと、時間帯が変わる可能性がある。 本変数により、時間帯決定ルール(When::V::TimezoneProperty#rrule)を参照する。
この時法を生成した時間帯プロパティ - additional attribute
517 518 519 |
# File 'lib/when_exe/tmreference.rb', line 517 def tz_prop @tz_prop end |
#utc_reference ⇒ When::TM::ClockTime (readonly) Also known as: utcReference
UTCによる参照事象の時刻
UTC time of the reference event
490 491 492 |
# File 'lib/when_exe/tmreference.rb', line 490 def utc_reference @utc_reference end |
#zone ⇒ String (readonly) Also known as: to_extended
この時法のUTCとの差(ISO 8601 extended format) - additional attribute
530 531 532 |
# File 'lib/when_exe/tmreference.rb', line 530 def zone @zone end |
Class Method Details
._local_time ⇒ Object
共通処理
397 398 399 400 401 402 403 404 405 406 |
# File 'lib/when_exe/tmreference.rb', line 397 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 のグローバルな設定を行う
348 349 350 351 352 |
# File 'lib/when_exe/tmreference.rb', line 348 def _setup_(local=nil) @_lock_ = Mutex.new if When.multi_thread @_pool = {} @local_time = local end |
._setup_info ⇒ Hash
設定情報を取得する
358 359 360 |
# File 'lib/when_exe/tmreference.rb', line 358 def _setup_info {:local => _local_time} end |
.get_clock(options) ⇒ Object
410 411 412 |
# File 'lib/when_exe/tmreference.rb', line 410 def get_clock() get_clock_option() || local_time end |
.get_clock_option(options) ⇒ Object
415 416 417 418 419 |
# File 'lib/when_exe/tmreference.rb', line 415 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 のローカルタイムが設定されているか?
392 393 394 |
# File 'lib/when_exe/tmreference.rb', line 392 def is_local_time_set? _local_time[0] end |
.local_time ⇒ When::Parts::Timezone::Base
When::TM::Clock のローカルタイムを読みだす
384 385 386 |
# File 'lib/when_exe/tmreference.rb', line 384 def local_time _local_time[1] end |
.local_time=(local) ⇒ When::Parts::Timezone::Base, String
@local_timeは、原則、ライブラリ立ち上げ時に setup で初期化する。 以降、@local_timeに代入を行っても、すでに生成した When::TM::TemporalPosition 等には反映されない。
地方時
372 373 374 375 376 377 378 |
# File 'lib/when_exe/tmreference.rb', line 372 def local_time=(local) if @_pool @local_time = local else _setup_(local) end end |
.to_hms(hms, extended = true) ⇒ Object
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 449 450 451 |
# File 'lib/when_exe/tmreference.rb', line 422 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
期間オブジェクトの桁数合わせ
658 659 660 661 662 663 |
# File 'lib/when_exe/tmreference.rb', line 658 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)に変換する
610 611 612 613 614 615 616 617 618 |
# File 'lib/when_exe/tmreference.rb', line 610 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
夏時間
742 743 744 |
# File 'lib/when_exe/tmreference.rb', line 742 def _daylight(time) _tz_prop ? _tz_prop._daylight(time) : self end |
#_need_validate ⇒ Object
夏時間の有無
736 737 738 |
# File 'lib/when_exe/tmreference.rb', line 736 def _need_validate _tz_prop ? _tz_prop._need_validate : false end |
#_number_to_coordinates(serial_time) ⇒ Numeric
Numeric(serial time)を時刻に変換する
626 627 628 629 630 631 632 633 634 |
# File 'lib/when_exe/tmreference.rb', line 626 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
時刻配列の分解能
667 668 669 670 671 |
# File 'lib/when_exe/tmreference.rb', line 667 def _precision(time, default=nil) nil_index = time.compact.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
675 676 677 678 679 680 681 |
# File 'lib/when_exe/tmreference.rb', line 675 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 のための要素生成
643 644 645 |
# File 'lib/when_exe/tmreference.rb', line 643 def _to_hash_value(={}) [:method] == :to_m17n ? tzname(:hash)[0] : super end |
#clk_trans(clk_time) ⇒ When::TM::ClockTime Also known as: clkTrans
UTC時刻をこの時法の時刻に変換する
572 573 574 |
# File 'lib/when_exe/tmreference.rb', line 572 def clk_trans(clk_time) return self.to_clk_time(When::UTC.to_universal_time(u_time.clk_time)) end |
#daylight ⇒ When::TM::Clock
夏時間帯の時計
724 725 726 |
# File 'lib/when_exe/tmreference.rb', line 724 def daylight _tz_prop ? _tz_prop.daylight : self end |
#location ⇒ When::Coordinates::Spatial
時間帯を代表する空間位置
711 712 713 714 |
# File 'lib/when_exe/tmreference.rb', line 711 def location @location ||= @tz_prop.kind_of?(When::Parts::Timezone) ? @tz_prop.location : When::Coordinates::Spatial.default_location end |
#rate_of_clock ⇒ Numeric
時間の歩度
537 538 539 |
# File 'lib/when_exe/tmreference.rb', line 537 def rate_of_clock @time_standard.rate_of_clock end |
#standard ⇒ When::TM::Clock
標準時間帯の時計
718 719 720 |
# File 'lib/when_exe/tmreference.rb', line 718 def standard _tz_prop ? _tz_prop.standard : self end |
#to_basic ⇒ String
この時法のUTCとの差(ISO 8601 basic format)
651 652 653 654 |
# File 'lib/when_exe/tmreference.rb', line 651 def to_basic return '' unless @zone @zone.gsub(/:/, '') end |
#to_clk_time(fod, options = {}) ⇒ When::TM::ClockTime
128秒単位の実数をこの時法の時刻に変換する
595 596 597 598 599 600 601 602 |
# File 'lib/when_exe/tmreference.rb', line 595 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秒単位の実数に変換する
584 585 586 |
# File 'lib/when_exe/tmreference.rb', line 584 def to_universal_time(clk_time, sdn=nil) return _coordinates_to_number(_decode(clk_time)) / @second end |
#tz_difference ⇒ When::TM:IntervalLength
夏時間帯と標準時間帯の時間差
730 731 732 |
# File 'lib/when_exe/tmreference.rb', line 730 def tz_difference _tz_prop ? _tz_prop.tz_difference : 0 end |
#tzname(format = :extended) ⇒ Array<String>
:extended または :basicが指定され、上記は時間帯名が定義されていない場合は、ISO 8601形式で返す
この時法の時間帯名
695 696 697 698 699 700 701 702 703 704 705 706 707 |
# File 'lib/when_exe/tmreference.rb', line 695 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
551 552 553 |
# File 'lib/when_exe/tmreference.rb', line 551 def universal_time(sdn=nil) return @utc_reference.universal_time end |
#utc_trans(u_time) ⇒ When::TM::ClockTime Also known as: utcTrans
この時法の時刻をUTC時刻に変換する
561 562 563 |
# File 'lib/when_exe/tmreference.rb', line 561 def utc_trans(u_time) return When::UTC.to_clk_time(self.to_universal_time(u_time.clk_time)) end |