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) ⇒ 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
#[], #^, _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
472 473 474 |
# File 'lib/when_exe/tmreference.rb', line 472 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
444 445 446 |
# File 'lib/when_exe/tmreference.rb', line 444 def reference_event @reference_event end |
#reference_time ⇒ When::TM::ClockTime (readonly) Also known as: referenceTime
この時法による参照事象の時刻
Time of the reference event for this clock
453 454 455 |
# File 'lib/when_exe/tmreference.rb', line 453 def reference_time @reference_time end |
#second ⇒ Numeric (readonly)
universal_timeとこの時法の最小単位との比 - additional attribute
496 497 498 |
# File 'lib/when_exe/tmreference.rb', line 496 def second @second end |
#time_standard ⇒ When::TimeStandard (readonly)
時刻制 - additional attribute
479 480 481 |
# File 'lib/when_exe/tmreference.rb', line 479 def time_standard @time_standard end |
#tz_prop ⇒ When::V::TimezoneProperty Also known as: tzProp
When::TM::TemporalPosition に対して加減算を行うと、時間帯が変わる可能性がある。 本変数により、時間帯決定ルール(When::V::TimezoneProperty#rrule)を参照する。
この時法を生成した時間帯プロパティ - additional attribute
489 490 491 |
# File 'lib/when_exe/tmreference.rb', line 489 def tz_prop @tz_prop end |
#utc_reference ⇒ When::TM::ClockTime (readonly) Also known as: utcReference
UTCによる参照事象の時刻
UTC time of the reference event
462 463 464 |
# File 'lib/when_exe/tmreference.rb', line 462 def utc_reference @utc_reference end |
#zone ⇒ String (readonly) Also known as: to_extended
この時法のUTCとの差(ISO 8601 extended format) - additional attribute
502 503 504 |
# File 'lib/when_exe/tmreference.rb', line 502 def zone @zone end |
Class Method Details
._local_time ⇒ Object
共通処理
372 373 374 375 376 377 378 379 380 381 |
# File 'lib/when_exe/tmreference.rb', line 372 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 のグローバルな設定を行う
323 324 325 326 327 |
# File 'lib/when_exe/tmreference.rb', line 323 def _setup_(local=nil) @_lock_ = Mutex.new if When.multi_thread @_pool = {} @local_time = local end |
._setup_info ⇒ Hash
設定情報を取得する
333 334 335 |
# File 'lib/when_exe/tmreference.rb', line 333 def _setup_info {:local => _local_time} end |
.get_clock(options) ⇒ Object
385 386 387 |
# File 'lib/when_exe/tmreference.rb', line 385 def get_clock() get_clock_option() || local_time end |
.get_clock_option(options) ⇒ Object
390 391 392 393 394 |
# File 'lib/when_exe/tmreference.rb', line 390 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 のローカルタイムが設定されているか?
367 368 369 |
# File 'lib/when_exe/tmreference.rb', line 367 def is_local_time_set? _local_time[0] end |
.local_time ⇒ When::Parts::Timezone::Base
When::TM::Clock のローカルタイムを読みだす
359 360 361 |
# File 'lib/when_exe/tmreference.rb', line 359 def local_time _local_time[1] end |
.local_time=(local) ⇒ When::Parts::Timezone::Base, String
@local_timeは、原則、ライブラリ立ち上げ時に setup で初期化する。 以降、@local_timeに代入を行っても、すでに生成した When::TM::TemporalPosition 等には反映されない。
地方時
347 348 349 350 351 352 353 |
# File 'lib/when_exe/tmreference.rb', line 347 def local_time=(local) if @_pool @local_time = local else _setup_(local) end end |
.to_hms(hms, extended = true) ⇒ Object
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 426 |
# File 'lib/when_exe/tmreference.rb', line 397 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
期間オブジェクトの桁数合わせ
628 629 630 631 632 633 |
# File 'lib/when_exe/tmreference.rb', line 628 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)に変換する
580 581 582 583 584 585 586 587 588 |
# File 'lib/when_exe/tmreference.rb', line 580 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
夏時間
712 713 714 |
# File 'lib/when_exe/tmreference.rb', line 712 def _daylight(time) _tz_prop ? _tz_prop._daylight(time) : self end |
#_need_validate ⇒ Object
夏時間の有無
706 707 708 |
# File 'lib/when_exe/tmreference.rb', line 706 def _need_validate _tz_prop ? _tz_prop._need_validate : false end |
#_number_to_coordinates(serial_time) ⇒ Numeric
Numeric(serial time)を時刻に変換する
596 597 598 599 600 601 602 603 604 |
# File 'lib/when_exe/tmreference.rb', line 596 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
時刻配列の分解能
637 638 639 640 641 |
# File 'lib/when_exe/tmreference.rb', line 637 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
645 646 647 648 649 650 651 |
# File 'lib/when_exe/tmreference.rb', line 645 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 のための要素生成
613 614 615 |
# File 'lib/when_exe/tmreference.rb', line 613 def _to_hash_value(={}) [:method] == :to_m17n ? tzname(:hash)[0] : super end |
#clk_trans(clk_time) ⇒ When::TM::ClockTime Also known as: clkTrans
UTC時刻をこの時法の時刻に変換する
544 545 546 |
# File 'lib/when_exe/tmreference.rb', line 544 def clk_trans(clk_time) return self.to_clk_time(When::UTC.to_universal_time(u_time.clk_time)) end |
#daylight ⇒ When::TM::Clock
夏時間帯の時計
694 695 696 |
# File 'lib/when_exe/tmreference.rb', line 694 def daylight _tz_prop ? _tz_prop.daylight : self end |
#location ⇒ When::Coordinates::Spatial
時間帯を代表する空間位置
681 682 683 684 |
# File 'lib/when_exe/tmreference.rb', line 681 def location @location ||= @tz_prop.kind_of?(When::Parts::Timezone) ? @tz_prop.location : When::Coordinates::Spatial.default_location end |
#rate_of_clock ⇒ Numeric
時間の歩度
509 510 511 |
# File 'lib/when_exe/tmreference.rb', line 509 def rate_of_clock @time_standard.rate_of_clock end |
#standard ⇒ When::TM::Clock
標準時間帯の時計
688 689 690 |
# File 'lib/when_exe/tmreference.rb', line 688 def standard _tz_prop ? _tz_prop.standard : self end |
#to_basic ⇒ String
この時法のUTCとの差(ISO 8601 basic format)
621 622 623 624 |
# File 'lib/when_exe/tmreference.rb', line 621 def to_basic return '' unless @zone @zone.gsub(/:/, '') end |
#to_clk_time(fod, options = {}) ⇒ When::TM::ClockTime
128秒単位の実数をこの時法の時刻に変換する
565 566 567 568 569 570 571 572 |
# File 'lib/when_exe/tmreference.rb', line 565 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秒単位の実数に変換する
555 556 557 |
# File 'lib/when_exe/tmreference.rb', line 555 def to_universal_time(clk_time) return _coordinates_to_number(_decode(clk_time)) / @second end |
#tz_difference ⇒ When::TM:IntervalLength
夏時間帯と標準時間帯の時間差
700 701 702 |
# File 'lib/when_exe/tmreference.rb', line 700 def tz_difference _tz_prop ? _tz_prop.tz_difference : 0 end |
#tzname(format = :extended) ⇒ Array<String>
:extended または :basicが指定され、上記は時間帯名が定義されていない場合は、ISO 8601形式で返す
この時法の時間帯名
665 666 667 668 669 670 671 672 673 674 675 676 677 |
# File 'lib/when_exe/tmreference.rb', line 665 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
523 524 525 |
# File 'lib/when_exe/tmreference.rb', line 523 def universal_time(sdn=nil) return @utc_reference.universal_time end |
#utc_trans(u_time) ⇒ When::TM::ClockTime Also known as: utcTrans
この時法の時刻をUTC時刻に変換する
533 534 535 |
# File 'lib/when_exe/tmreference.rb', line 533 def utc_trans(u_time) return When::UTC.to_clk_time(self.to_universal_time(u_time.clk_time)) end |