Parent

Included Modules

Class Index [+]

Quicksearch

When::TM::TemporalPosition

「時間位置」の基底クラス

see gml schema

Attributes

indeterminated_position[R]

この時間位置の意味づけ

  type : When::TM::IndeterminateValue
frame[RW]

この時間位置と関連付けられた時間参照系 (relation - Reference)

The time reference system associated with the temporal position being described

  type : When::TM::ReferenceSystem
events[RW]

この時間位置と関連付けられたイベント - additional attribute

  type : [When::Parts::Enumerator]
precision[RW]

この時間位置の分解能 - additional attribute

  type : [Numeric]
options[R]

その他の属性 - additional attribute

  type : {String=>Object}
trans[RW]

その他の属性 - additional attribute

  type : {String=>Object}
query[RW]

その他の属性 - additional attribute

  type : {String=>When::BasicTypes::M17n}
time_standard[RW]

その他の属性 - additional attribute

  type : When::Ephemeris::UnversalTime

Public Class Methods

_instance(specification, options={}) click to toggle source

Temporal Objetct の生成

 * specification : When Standard Representation
 * options       : Hash
  * :frame         => 暦法の指定
  * :clock         => 時法の指定
  * :abbreviation  => ISO8601 上位省略形式のためのデフォルト日付(省略時 指定なし)
  * :wkst          => ISO8601 週日形式のための暦週開始曜日(省略時 'MO')
  * :precision     => 生成するオブジェクトの分解能
  * :era_name      => 暦年代の指定
  * :trans => Hash
   * :lower        => 暦年代適用の下限
    * true            - epoch_of_use の始め(省略時)
    * :reference_date - 参照事象の日付
   * :upper        => 暦年代適用の上限
    * true            - epoch_of_use の終わり(省略時)
    * :reference_date - 参照事象の日付
   * :count        => 条件に合致する暦年代のうち何番目を採用するか
  * :query => Hash
   * :area         => area による暦年代絞込み
   * :period       => period による暦年代絞込み
   * (:name        => name による暦年代絞込み(epoch の attribute使用可))
  * :time_standard => 時刻系の指定(省略時 When::Ephemeris::UnversalTime)
 * returns
  * ISO8601 time point         - When::TM::TemporalPosition
  * ISO8601 duration           - When::TM::Duration
  * ISO8601 repeating interval - When::Parts::GeometricComplex
     # File when/tmposition.rb, line 214
214:       def _instance(specification, options={})
215: 
216:         # Suffix - Frame specification
217:         rfc5545form, frame = specification.split(/\^{1,2}/, 2)
218:         if (frame)
219:           options[:frame] = When.IRI(frame, '_c:')
220:         end
221: 
222:         # Prefix - RFC 5545 Options
223:         if (rfc5545form =~ /^([^:]+[^-:\d]):(.+)$/)
224:           rfc5545option, iso8601form = $~[1..2]
225:           rfc5545option.split(/;/).each do |eq|
226:             key, value = eq.split(/=/, 2)
227:             case key
228:             when 'VALUE' ; options[:precision] = value
229:             when 'TZID'  ; options[:clock] = When::V::Timezone[value].kind_of?(Array) ? When::V::Timezone[value][1] :
230:                                                                                         When::V::Timezone[value]
231:             else         ; options[key]    = value
232:             end
233:           end
234:         else
235:           iso8601form = rfc5545form
236:         end
237:         options = options.dup
238: 
239:         # IndeterminateValue
240:         if (iso8601form.sub!(/\/After$|^Before\/|^Now$|^Unknown$|^[-+]Infinity$/, ''))
241:           options[:indeterminated_position] = S[$&.sub(/\//,'')]
242:           case options[:indeterminated_position]
243:           when Now,
244:                Unknown,
245:                Max,
246:                Min
247:             return self.new(self._options(options))
248:           end
249:         end
250: 
251:         # each specification
252:         splitted = iso8601form.split(/\//)
253:         if (splitted[0] =~ /^R(\d+)?$/)
254:           repeat = $1 ? $1.to_i : true
255:           splitted.shift
256:         end
257:         case splitted.length
258:         when 1
259:         when 2
260:           if (splitted[0] !~ /^[-+]?P/ && splitted[1] =~ /^\d/ && splitted[1].length < splitted[0].length)
261:             splitted[1] = splitted[0][0..(splitted[0].length-splitted[1].length-1)] + splitted[1]
262:           end
263:         else
264:           raise ArgumentError, "Irregal ISO8601 Format: #{iso8601form}"
265:         end
266:         options = self._options(options)
267:         element = splitted.map { |v| _date_time_or_duration(v, options.dup) }
268: 
269:         # total result
270:         case repeat
271:         when nil
272:           case element[1]
273:           when nil
274:             return element[0]
275:           when Duration
276:             case element[0]
277:             when Duration ; raise TypeError, "Duplicate Duration: #{element[0]} and #{element[1]}"
278:             when self     ; return When::Parts::GeometricComplex.new(*element)
279:             else          ; return When::Parts::GeometricComplex.new(element[0].first, element[1])
280:             end
281:           when self
282:             case element[0]
283:             when Duration ; return When::Parts::GeometricComplex.new([[element[1]-element[0],false], [element[1],true ]])
284:             when self     ; return When::Parts::GeometricComplex.new(element[0]..element[1])
285:             else          ; return When::Parts::GeometricComplex.new(element[0].first..element[1])
286:             end
287:           else
288:             case element[0]
289:             when Duration ; return When::Parts::GeometricComplex.new([[element[1].first-element[0],false],
290:                                                                       [element[1].last-element[0]-1,true ]])
291:             when self     ; return When::Parts::GeometricComplex.new(element[0]...element[1].last)
292:             else          ; return When::Parts::GeometricComplex.new(element[0].first...element[1].last)
293:             end
294:           end
295:         when 0            ; return []
296:         when Integer      ; return [element[0]] * repeat unless element[1]
297:         end
298: 
299:         case element[1]
300:         when Duration
301:           case element[0]
302:           when Duration   ; raise TypeError, "Duplicate Duration: #{element[0]} and #{element[1]}"
303:           else            ; duration = element[1]
304:           end
305:         when self
306:           case element[0]
307:           when Duration   ; duration = -element[0]
308:           when self       ; duration =  element[1] - element[0]
309:           else            ; duration =  element[1] - element[0].first
310:           end
311:         else
312:           case element[0]
313:           when Duration   ; duration = -element[0]
314:           when self       ; duration =  element[1].first - element[0]
315:           else            ; duration =  element[1].first - element[0].first
316:           end
317:         end
318:         base = element[0].kind_of?(Duration) ? element[1] : element[0]
319: 
320:         if repeat.kind_of?(Integer)
321:           result = case base
322:                    when self  ; (1..repeat-1).inject([base]) {|a,i| a << (a[1] + duration) }
323:                    else       ; (1..repeat-1).inject([base]) {|a,i| a << When::Parts::GeometricComplex.new(
324:                                                                           a[1].first+duration...a[1].last+duration)}
325:                    end
326:           result.reverse! if duration.sign < 0
327:           return result
328: 
329:         else
330:           duration = -duration if duration.sign < 0
331:           return case base
332:                  when self    ; When::V::Event.new({'rrule'=>{'FREQ'=>duration}, 'dtstart'=>base})
333:                  else         ; When::V::Event.new({'rrule'=>{'FREQ'=>duration}, 'dtstart'=>base.first,
334:                                                                                  'dtend'  =>base.last})
335:                  end
336:         end
337:       end
setup(format=nil) click to toggle source

When::TM::TemporalPosition Class のグローバルな設定を行う

  format : Hash
    strftime で用いる記号の定義
    format の指定がない場合、format は Format(モジュール定数)と解釈する
    # File when/region/m17n.rb, line 42
42:         def setup(format=nil)
43:           @format = format ? Format.merge(format) : Format
44:         end

Public Instance Methods

+(other) click to toggle source

加算

  other   : Numeric or When::TM::IntervalLength

  returns : When::TM::TemporalPosition
     # File when/tmposition.rb, line 502
502:     def +(other)
503:       case other
504:       when Numeric, IntervalLength ; @frame.jul_trans(JulianDate.dynamical_time(dynamical_time + +other), self._attr)
505:       when PeriodDuration          ; _plus(other)
506:       else                         ; raise TypeError, "The right operand should be Duration"
507:       end
508:     end
+@() click to toggle source

ユリウス日時(実数)

  returns : Float

  dynamical time での経過日数を, ユリウス日と1970-01-01T00:00:00TTで時計あわせしたもの
     # File when/tmposition.rb, line 480
480:     def +@
481:       dynamical_time / IntervalLength::DAY + JulianDate::JD19700101 - 0.5
482:     end
-(other) click to toggle source

減算

  other   : When::TM::(Temporal)Position, Numeric or When::TM::IntervalLength

  returns : When::TM::TemporalPosition if other is a Numeric or When::TM::IntervalLength
            When::TM::IntervalLength   if other is a When::TM::TemporalPosition
     # File when/tmposition.rb, line 517
517:     def -(other)
518:       case other
519:       when TemporalPosition, Position ; [@precision, other.precision].min > When::Coordinates::DAY ?
520:                                            IntervalLength.new(self.dynamical_time - other.dynamical_time) :
521:                                            IntervalLength.new(self.to_i - other.to_i, 'day')
522:       when Numeric, IntervalLength    ; @frame.jul_trans(JulianDate.dynamical_time(dynamical_time - +other), self._attr)
523:       when PeriodDuration             ; _plus(-other)
524:       else                            ; raise TypeError, "The right operand should be Duration or (Temporal)Position"
525:       end
526:     end
<=>(other) click to toggle source

大小比較

  returns : Integer(-1, 0, 1)

  分解能の低い方にあわせて比較を行う

    Ex. when?('2011-03') <=> when?('2011-03-10') ---> 0
     # File when/tmposition.rb, line 590
590:     def <=>(other)
591:       other  = other.first if other.kind_of?(When::Parts::GeometricComplex)
592:       [self.indeterminated_position, other.indeterminated_position].each do |position|
593:         prec = SYSTEM if [IndeterminateValue::Min, IndeterminateValue::Max].include?(position)
594:       end
595:       prec   = [self.precision, other.precision].min unless prec
596:       case prec
597:       when DAY    ; return self.to_i <=> other.to_i
598:       when SYSTEM ; src, dst = self, other
599:       else        ; src, dst =
600:         [(prec >= self.precision ) ? self  : self.floor(prec),
601:          (prec >= other.precision) ? other : other.floor(prec)]
602:       end
603:       return src.to_i <=> dst.to_i if prec <= DAY
604:       return src.universal_time <=> dst.universal_time if src.time_standard.equal?(dst.time_standard)
605:       return src.dynamical_time <=> dst.dynamical_time
606:     end
[](index) click to toggle source

要素の参照

  index   : Integer or String of When::Coordinates::PRECISION
    参照する要素の指定

  returns : Numeric
     # File when/tmposition.rb, line 491
491:     def [](index)
492:       return value(index) if index.kind_of?(String) || !index.respond_to?(:inject)
493:       index.inject([]) {|list, i| list << value(i) }
494:     end
^(other, &block) click to toggle source

条件を満たすオブジェクトの抽出

  other   : Module, When::Coordinates::Residue, 
            When::TM::Duration, When::TM::Calendar, When::TM::CalendarEra

  block   : If block is given, the specified block is yield.

  returns : The following objects are returned if other is a ...
  • Module : Array of (element^self) for all When::Parts::IRI registered elements

  • Array : Array of (self^element) for elemnt of other which belong to the specified module or class.

  • When::TM::Duration : Enumerator which generates temporal position sequence begins from self with the specified duration.

  • When::TM::Calendar : Array of temporal position using the specified calendar as a frame.

  • When::TM::CalendarEra : Array of temporal position using the specified calendar era as a calendarEraName. If the specified calendar era has hierarchies , these all hierarchies are applied.

     # File when/tmposition.rb, line 624
624:     def ^(other, &block)
625:       list = []
626:       case other
627:       when Numeric, TemporalPosition, Position
628:         raise TypeError, "Operand should not be Numeric or (Temporal)Position"
629: 
630:       when Module
631:         objects = []
632:         ObjectSpace.each_object(other) do |object|
633:           objects << object if object.registered?
634:         end
635:         objects.each do |object|
636:           element = (object ^ self)
637:           if element
638:             list << element
639:             yield(element) if block_given?
640:           end
641:         end
642:         return list
643: 
644:       when Array
645:         return other.map {|v| self.^(v, &block)}
646: 
647:       else
648:         if other.respond_to?(:_enumerator)
649:           enumerator = other._enumerator(self)
650:           return enumerator unless block_given?
651:           return enumerator.each(&block)
652:         end
653: 
654:         element = (other ^ self)
655:         if element
656:           list << element
657:           yield(element) if block_given?
658:         end
659:         if (other.respond_to?(:child) && other.child)
660:           other.child.each do |object|
661:             list += self.^(object, &block)
662:           end
663:         end
664:         return list
665:       end
666:     end
dynamical_time() click to toggle source

外部時間

  returns : Numeric

  1970-01-01T00:00:00TT からの terrestrial time の経過時間 / 128秒
     # File when/tmposition.rb, line 464
464:     def dynamical_time
465:       return @dynamical_time if @dynamical_time && @indeterminated_position != Now
466:       @dynamical_time = 
467:         case @indeterminated_position
468:         when Max ; +Float::MAX/4
469:         when Min ; -Float::MAX/4
470:         else     ; @time_standard.to_dynamical_time(universal_time)
471:         end
472:     end
floor(digit=DAY, precision=digit) click to toggle source

下位桁の切り捨て

  digit     : Integer
    これより下の桁を切り捨てる(省略すると When::Coordinates::DAY)

  precision : Integer (Enumerated in the When::Coordinates Module)
    切り捨て結果の分解能(省略すると切り捨てずに残した最下位の桁)

  returns   : When::TM::TemporalPosition(本 Class では、実際には切り捨てない)
     # File when/tmposition.rb, line 570
570:     def floor(digit=DAY, precision=digit)
571:       self
572:     end
has_time?() click to toggle source

分解能が時刻を持つか

  type : Boolean
     # File when/tmposition.rb, line 578
578:     def has_time?
579:       (@precision > 0)
580:     end
month(*args, &block) click to toggle source

所属する月

  ord  : 月の番号    (default: 今月)
    今月を 0 とする月番号(Integer) または月番号の範囲(Range)
    -1 - 先月
     0 - 今月
    +1 - 来月
  wkst : 週の開始曜日(default: なし)

  returns : 月の情報
    ブロックなし - 所属する月を範囲として表現する Range
    ブロックあり
      wkst なし  - 所属する月の各日をブロックに渡した結果の Array
      wkst あり  - 所属する月の各日をブロックに渡した結果の七曜表
     # File when/region/m17n.rb, line 161
161:       def month(*args, &block)
162:         first, length, wkst = _range(args)
163:         if wkst
164:           (first...(first+length)).map {|i|
165:             begun = self.floor(MONTH,DAY) + When::TM::PeriodDuration.new([0,i,0])
166:             ended = begun                 + When::TM::PeriodDuration.new([0,1,0])
167:             ended = ended.prev
168:             dates = [begun]
169:             loop do
170:               current = dates[1].week(wkst)
171:               if current.include?(ended)
172:                 dates[1] = ended
173:                 break (dates.map {|date| date.week(wkst, &block)}).unshift(yield(begun, MONTH)).compact
174:               else
175:                 dates << dates[1] + When::TM::PeriodDuration.new([0,0,7])
176:               end
177:             end
178:           }
179:         else
180:           begun = self.floor(MONTH,DAY) + When::TM::PeriodDuration.new([0, first,  0])
181:           ended = begun                 + When::TM::PeriodDuration.new([0, length, 0])
182:           if block_given?
183:             (begun...ended).map do |date|
184:               yield(date)
185:             end
186:           else
187:             When::Parts::GeometricComplex.new(begun...ended)
188:           end
189:         end
190:       end
next() click to toggle source

次の日時

  returns : When::TM::TemporalPosition

  分解能に対応する Duration だけ,日時を進める
     # File when/tmposition.rb, line 555
555:     def next
556:       self + period
557:     end
Also aliased as: succ
period() click to toggle source

分解能に対応する Duration

  returns : When::TM::PeriodDuration
     # File when/tmposition.rb, line 532
532:     def period
533:       return @period if @period
534:       period_name = When::Coordinates::PERIOD_NAME[@precision]
535:       raise ArgumentError, "Presicion not defined" unless period_name
536:       @period = When.Duration(period_name)
537:     end
prev() click to toggle source

前の日時

  returns : When::TM::TemporalPosition

  分解能に対応する Duration だけ,日時を戻す
     # File when/tmposition.rb, line 545
545:     def prev
546:       self - period
547:     end
strftime(pattern, locale=nil) click to toggle source

指定の書式による多言語対応文字列化

  pattern : When::BasicTypes::M17n
    書式
  locale  : [String]
    文字列化を行う locale の指定(デフォルト : すべて)

  returns : When::BasicTypes::M17n

  pattern で指定した書式で多言語対応文字列化する
    # File when/region/m17n.rb, line 58
58:       def strftime(pattern, locale=nil)
59:         pattern = m17n([pattern]*self.keys.length, {:locale=>self.keys}) if pattern.instance_of?(String)
60:         pattern._printf([], locale) do |k, *t|
61:           _strftime(k, pattern, [''])
62:         end
63:       end
succ() click to toggle source
Alias for: next
term(designator, locale=nil, d=0, e=3) click to toggle source

strftime で扱う項の値を取得する

  designator : String
    項目名
  locale     : String
    文字列化を行う場合の locale の指定
  d          : Integer
    日付が'年月日'、時刻が'時分秒'でない表現のための桁位置変更指示
      年月に付く場合 - 大きいほうに位置をずらす
      分秒に付く場合 - 小さいほうに位置をずらす

  returns    : designator に依存
     # File when/region/m17n.rb, line 78
 78:       def term(designator, locale=nil, d=0, e=3)
 79:         case designator
 80:                                                               # 現在のロケールにおける曜日の省略名
 81:         when 'a' ; (When.IRI('_co:CommonResidue::Week')[to_i % 7].label/locale)[/^.{1,#{e}}/]
 82:                                                               # 現在のロケールにおける曜日の完全な名前
 83:         when 'A' ; (When.IRI('_co:CommonResidue::Week')[to_i % 7].label/locale)
 84:         when 'b' ; (name(MONTH-d)/locale)[/^.{1,#{e}}/]       # 現在のロケールにおける月の省略名
 85:         when 'B' ; (name(MONTH-d)/locale)                     # 現在のロケールにおける月の完全な名前
 86:         when 'c' ; to_m17n/locale                             # 現在のロケールにおいて一般的な日付・時刻の表記
 87:         when 'C' ; self[YEAR-d].to_i.div(100)                 # 世紀 (西暦年の上 2 桁)
 88:         when 'd' ; (floor(DAY) - floor(MONTH-d)).day + 1      # 月内通算日
 89:         when 'E' ; Array(calendar_era_name)[0]/locale         # 年号
 90:         when 'F' ; floor(DAY).to_m17n/locale                  # ISO 8601 形式の日付フォーマット
 91:                                                               # ISO 8601 週単位表記の年
 92:         when 'G' ; ((floor(YEAR-d,DAY) + 4*IntervalLength::DAY) & Residue.new(0,7,1))[YEAR-d]
 93:                                                               # ISO 8601 週単位表記の年の下2桁
 94:         when 'g' ; ((floor(YEAR-d,DAY) + 4*IntervalLength::DAY) & Residue.new(0,7,1))[YEAR-d] % 100
 95:         when 'H' ; self[HOUR]                                 # 24 時間表記での時
 96:         when 'I' ; (self[HOUR]-1) % 12 + 1                    # 12 時間表記での時
 97:         when 'j' ; (floor(DAY) - floor(YEAR-d)).day + 1       # 年の初めから通算の日数
 98:         when 'm' ; self[MONTH-d]                              # 月
 99:         when 'M' ; self[MINUTE+d]                             # 分
100:         when 'p' ; (AMPM[self[HOUR].to_i.div(12)]/locale).upcase   # 現在のロケールにおける「午前」「午後」に相当する文字列
101:         when 'P' ; (AMPM[self[HOUR].to_i.div(12)]/locale).downcase # 前項を小文字で表記
102:         when 's' ; universal_time / IntervalLength::SECOND    # 紀元 (1970-01-01T00:00:00Z) からの秒数
103:         when 'S' ; self[SECOND+d]                             # 秒 (10 進数表記)
104:         when 'u' ; (to_i % 7) + 1                             # 週の何番目の日か(月曜日を 1 とする)
105:                                                               # 年の初めからの通算の週番号(日曜日始まり)
106:         when 'U' ; (floor(DAY) - (floor(YEAR-d,DAY) & Residue.new(6,7))).week.floor + 1
107:                                                               # ISO 8601 形式での年の始めからの週番号
108:         when 'V' ; (floor(DAY) - ((floor(YEAR-d,DAY) + 4*IntervalLength::DAY) & Residue.new(0,7,1))).week.floor + 1
109:         when 'w' ; (to_i + 1) % 7                             # 週の何番目の日 か(日曜日を 0 とする)
110:                                                               # 年の初めからの通算の週番号(月曜日始まり)
111:         when 'W' ; (floor(DAY) - (floor(YEAR-d,DAY) & Residue.new(0,7))).week.floor + 1
112:         when 'X' ; clk_time._time_to_s                        # 現在のロケールで一般的な時刻表記
113:         when 'y' ; self[YEAR-d] % 100                         # 西暦の下2桁 (世紀部分を含まない年)
114:         when 'Y' ; self[YEAR-d]                               # 世紀部分を含めた ( 4 桁の) 西暦年
115:         when 'z' ; clock.to_basic                             # +hhmm や -hhmm の形式のタイムゾーン
116:         when 'Z' ; clock.tzname/locale                        # タイムゾーンまたはゾーン名または省略名
117:         else     ; raise ArgumentError, "Invalid designator"
118:         end
119:       end
to_f() click to toggle source

ユリウス日時(実数)

  returns : Float

  universal time での経過日数を, ユリウス日と1970-01-01T00:00:00Zで時計あわせしたもの
     # File when/tmposition.rb, line 454
454:     def to_f
455:       universal_time / IntervalLength::DAY + JulianDate::JD19700101 - 0.5
456:     end
to_i() click to toggle source

ユリウス日(整数)

  returns : Integer

  -4712-01-01T12:00:00Z からの経過日数に対応する通番(当該時間帯での午前0時に1進める)
     # File when/tmposition.rb, line 441
441:     def to_i
442:       sd  = universal_time
443:       sd -= @frame.universal_time if @frame.kind_of?(Clock)
444:       div, mod = sd.divmod(IntervalLength::DAY)
445:       div + JulianDate::JD19700101
446:     end
to_m17n(*args) click to toggle source

多言語対応文字列化

  returns : When::BasicTypes::M17n

  When Standard Representation により多言語対応文字列化する
     # File when/tmposition.rb, line 674
674:     def to_m17n(*args)
675:       return m17n(I[@indeterminated_position]) if [Unknown, Max, Min].include?(@indeterminated_position)
676:       return m17n(_to_s)
677:     end
to_s(*args) click to toggle source

文字列化

  returns : String

  When Standard Representation により文字列化する
     # File when/tmposition.rb, line 688
688:     def to_s(*args)
689:       to_m17n(*args).to_s
690:     end
universal_time() click to toggle source

内部時間

  returns : Numeric

  1970-01-01T00:00:00Z からの Universal Time, Coordinated の経過時間 / 128秒

  暦法によっては、異なる意味を持つことがある
     # File when/tmposition.rb, line 426
426:     def universal_time
427:       case @indeterminated_position
428:       when Now ; @time_standard.now
429:       when Max ; +Float::MAX/4
430:       when Min ; -Float::MAX/4
431:       else     ; raise NameError, "Temporal Reference System is not defined"
432:       end
433:     end
week(*args) click to toggle source

所属する週

  ord  : 週の番号    (default: 今週)
    今週を 0 とする週番号(Integer) または週番号の範囲(Range)
    -1 - 先週
     0 - 今週
    +1 - 来週
  wkst : 週の開始曜日(default: 月曜)

  returns : 週の情報
    ブロックなし - 所属する週を範囲として表現する Range
    ブロックあり - 所属する週の各日をブロックに渡した結果の Array
     # File when/region/m17n.rb, line 134
134:       def week(*args)
135:         first, length, wkst = _range(args)
136:         wkst ||= 'MO'
137:         wkst   = When::Coordinates::Residue.day_of_week(wkst) if wkst.kind_of?(String)
138:         begun  = self.floor.succ & When::Coordinates::Residue.new(wkst, 7, first-1)
139:         ended  = begun + When::TM::PeriodDuration.new([0,0,length * 7])
140:         return When::Parts::GeometricComplex.new(begun...ended) unless block_given?
141:         ((begun...ended).map { |date|
142:           yield(date, self)
143:         }).unshift(yield(begun, WEEK)).compact
144:       end
year(*args, &block) click to toggle source

所属する年

  ord  : 年の番号    (default: 今年)
    今月を 0 とする年番号(Integer) または年番号の範囲(Range)
    -1 - 昨年
     0 - 今年
    +1 - 来年
  wkst : 週の開始曜日(default: なし)

  returns : 年の情報
    ブロックなし - 所属する年を範囲として表現する Range
    ブロックあり
      wkst なし  - 所属する年の各日をブロックに渡した結果の Array
      wkst あり  - 所属する年の各日をブロックに渡した結果の七曜表
     # File when/region/m17n.rb, line 207
207:       def year(*args, &block)
208:         first, length, wkst = _range(args)
209:         if wkst
210:           (first...(first+length)).map {|i|
211:             begun   = self.floor(YEAR,DAY) + When::TM::PeriodDuration.new([i,0,0])
212:             ended   = begun                + When::TM::PeriodDuration.new([1,0,0])
213:             current = begun
214:             result  = [yield(begun, YEAR)]
215:             while current < ended do
216:               result << current.month(wkst, &block)
217:               current += When::TM::PeriodDuration.new([0,1,0])
218:             end
219:             result.compact
220:           }
221:         else
222:           begun = self.floor(YEAR,DAY) + When::TM::PeriodDuration.new([first,  0, 0])
223:           ended = begun                + When::TM::PeriodDuration.new([length, 0, 0])
224:           if block_given?
225:             (begun...ended).map do |date|
226:               yield(date)
227:             end
228:           else
229:             When::Parts::GeometricComplex.new(begun...ended)
230:           end
231:         end
232:       end

Private Instance Methods

method_missing(name, *args, &block) click to toggle source

その他のメソッド

  When::TM::TemporalPosition で定義されていないメソッドは
  処理を @frame (type: When::TM::Calendar or When::TM::Clock) に委譲する
     # File when/tmposition.rb, line 752
752:     def method_missing(name, *args, &block)
753:       @frame.send(name.to_sym, self, *args, &block)
754:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.