暦年代
see gml schema
この暦年代の基点となる事象
Event used as the datum for this calendar era
type : String
通常 String のサブクラスである When::BasicTypes::M17n を使用する。
[Accession,代始]:: 天皇・皇帝などの代始めの改元,必ずしも践祚と連動しない。
:: JIS X7108 附属書D表3に参照事象の例として「新しい天皇の即位」とある。
:: これは践祚を意味するので、岡田芳朗氏によれば適切ではないとのこと。
:: 英語には適切な訳語がないと思われる。
[FelicitousEvent,祥瑞]:: 祥瑞の発生に伴う改元
[NaturalDisaster,災異]:: 災異の発生に伴う改元
[InauspiciousYear,革年]:: 甲子革令・辛酉革命説による改元
[Foundation,創業]:: 建国による元号の制定
[CalendarReform,改暦]:: 改暦に伴う epoch_of_use の境界
この暦による参照事象の日付
Date of the reference event in the calendar being described
type : When::TM::CalDate
明治以前の改元は当該年の初めにに遡って適用された。しかし、日記などの資料は当然旧年号で
記載されている。このような場合、reference_date の分解能を「年」とする。
本ライブラリでは、reference_date の分解能が「年」の場合、When::TM::TemporalPosition._instance
の options[:lower] で年号使用の下限を年初とするか、epoch_of_use の下限とするかを
指定することができる。
この暦年代が日付の基礎として使用する期間
Period for which the era was used as a basis for dating
type : [When::TM::(Temporal)Position]
途中の改暦を指定するために要素が必要になることがあり、要素数が2を超えることがある。
最初の要素が When::TM::IndeterminateValue::MIN(-Infinity)の場合、年数を降順にカウントする。
この暦年代の元年の年番号(additional attribute)
The year number of the calendar associated with the first year of this calendar era
type : Integer
When::TM::CalendarEra オブジェクトを検索し取得する
see When#CalendarEra
# File when/tmreference.rb, line 738
738: def _instance(*args)
739: # パラメータ
740: args = args.dup
741: options = (args[1].kind_of?(Hash)) ? args.pop.dup : {}
742: key, epoch, reverse = options.delete(:label) || args
743: area = options.delete(:area)
744: period = options.delete(:period)
745: count = options.delete(:count) || 1
746:
747: # 候補
748: setup unless @_pool
749: pool = _candidates(options, area, period, key, epoch, false) +
750: _candidates(options, area, period, key, reverse, true)
751: pool.uniq!
752: return pool unless pool.size < count
753:
754: @order.each do |iri|
755: When.IRI(iri)
756: pool = _candidates(options, area, period, key, epoch, false) +
757: _candidates(options, area, period, key, reverse, true)
758: pool.uniq!
759: return pool unless pool.size < count
760: end
761:
762: return []
763: end
When::TM::CalendarEra Class のグローバルな設定を行う
order : [String of IRI]
When::TM::CalendarEra の検索順序を指定する
# File when/tmreference.rb, line 729
729: def setup(order=nil)
730: @_pool = {}
731: @order = order || ['_tm:Common', '_tm:ModernJapanese', '_tm:Jewish', '_tm:Mayan', '_tm:Japanese', '_tm:Chinese']
732: end
@julian_reference と other を比較する
other : Comparable
比較対象
returns : Integer
比較結果を 負, 0, 正の値で返す
# File when/tmreference.rb, line 991
991: def <=>(other) #TODO @precision は?
992: @julian_reference.universal_time <=> other.julian_reference.universal_time
993: end
この暦年代が日付の基礎として使用する期間
Period for which the era was used as a basis for dating
returns : When::TM::Period
ISO19108 に When::TM::Period と規定されているため、変数 @epoch とは別に、
本メソッドを提供する。
# File when/tmreference.rb, line 892
892: def epoch_of_use
893: @epoch_of_use ||=
894: Period.new(*([0, 1].map {|i|
895: date = @epoch[i]
896: if date.kind_of?(CalDate)
897: options = date._attr
898: options[:frame] = options.delete(:clock)
899: date = JulianDate.new(date.universal_time, options)
900: end
901: Instant.new(date) # See JIS X7108 5.3.2.2 e) When::TM::Period は直接 JulianDate を保持できない
902: }))
903: end
年数の数え方
returns : Boolean
true - 降順 (Before Common Era 方式)
false - 昇順 (Common Era 方式)
# File when/tmreference.rb, line 912
912: def reverse?
913: @epoch[0].indeterminated_position == Min
914: end
当該の暦年代の日付に変換する
date : When::TM::(Temporal)Position
trans_options : Hash
* :lower => 暦年代適用の下限
* true - epoch_of_use の始め(default)
* :reference_date - 参照事象の日付
* :upper => 暦年代適用の上限
* true - epoch_of_use の終わり(default)
* :reference_date - 参照事象の日付
returns : When::TM::TemporalPosition
When::TM::IndeterminateValue::Before - 当該の暦年代より前の日付である
When::TM::IndeterminateValue::After - 当該の暦年代より後の日付である
その他 - 当該の暦年代の日付に変換された When::TM::TemporalPosition
# File when/tmreference.rb, line 933
933: def trans(date, trans_options={})
934: # 当該日付の決定
935: date = date.any_other if date.kind_of?(Position)
936: epoch, cal_date =
937: case date
938: when Array ; _trans_array(date)
939: when JulianDate, DateAndTime ; _trans_date(date, date.clock)
940: when TemporalPosition ; _trans_date(date)
941: when Numeric ; _trans_date(JulianDate.new((date-JulianDate::JD19700101)*IntervalLength::DAY))
942: else ; raise TypeError, "Irregal Seed Date Type"
943: end
944:
945: # 範囲指定オプションの取得
946: trans_options ||= {}
947: lower = trans_options[:lower] || :reference_date
948: upper = trans_options[:upper] || true
949:
950: # 下限の確認
951: unless (@epoch[0].indeterminated_position == Min)
952: case lower
953: when true ; return Before if (cal_date.to_i < @epoch[0].to_i)
954: when :reference_date ; return Before if (cal_date.to_i < @reference_date.to_i)
955: end
956: end
957:
958: # 上限の確認
959: unless (@epoch[1].indeterminated_position == Max)
960: case upper
961: when true ; return After if (cal_date.to_i >= @epoch[1].to_i)
962: when :reference_date ; return After if (cal_date.to_i > @reference_date.to_i)
963: end
964: end
965:
966: # 発見した日時の属性設定
967: cal_date.calendar_era_name = [@label, @epoch_year, reverse?]
968: cal_date.cal_date[0] -= @epoch_year
969: cal_date.trans = trans_options.dup
970: cal_date.query = epoch.query.dup
971: return cal_date
972: end
その他のメソッド
When::TM::CalendarEra で定義されていないメソッドは 処理を @reference_date (type: When::TM::TemporalPosition) に委譲する
# File when/tmreference.rb, line 1305
1305: def method_missing(name, *args, &block)
1306: @reference_date.send(name.to_sym, self, *args, &block)
1307: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.