Class: When::TM::DateAndTime

Inherits:
CalDate show all
Defined in:
lib/when_exe/tmposition.rb,
lib/when_exe/inspect.rb

Overview

時刻を伴った日付

see gml schema

Constant Summary

Constants inherited from CalDate

CalDate::SearchOption

Constants inherited from TemporalPosition

TemporalPosition::AMPM, TemporalPosition::DateTimeInstanceMethods, TemporalPosition::Format, TemporalPosition::HashProperty

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 When

AUTHOR, CENTURY, COPYRIGHT, DAY, DECADE, EUCJP, HOUR, MINUTE, MONTH, MinusInfinity, Month, P1D, P1M, P1W, P1Y, PT1H, PT1M, PT1S, PlusInfinity, RootDir, SECOND, STRING, SYSTEM, SourceURI, When::TimeValue, UTF8, VERSION, W31J, WEEK, Week, YEAR, YEARS

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

Constants included from IndeterminateValue

IndeterminateValue::After, IndeterminateValue::Before, IndeterminateValue::I, IndeterminateValue::Max, IndeterminateValue::Min, IndeterminateValue::Now, IndeterminateValue::S, IndeterminateValue::Unknown

Instance Attribute Summary collapse

Attributes inherited from CalDate

#cal_date, #calendar_era, #calendar_era_props

Attributes inherited from TemporalPosition

#events, #frame, #indeterminated_position, #options, #precision, #query, #trans

Attributes included from Parts::Resource

#_pool, #child, #keys, #locale, #namespace

Instance Method Summary collapse

Methods inherited from CalDate

#%, #_event_form, #_to_h, #calendar_era_epoch, #calendar_era_go_back, #calendar_era_name, #calendar_era_reverse, #calendar_name, #coordinate, #cwday, #cweek, #cwyear, #day, #leaf?, #least_significant_coordinate, #length, #mday, #member, #month, #most_significant_coordinate, #mweek, #rdf_graph, #reference_label, #register_graph, #to_i, #to_jsonld_hash, #to_linked_data, #to_residue, #to_uri_linkeddata, #wday, #without_era, #yday, #year, #ymon, #yweek

Methods inherited from TemporalPosition

#+, #+@, #-, #<=>, #==, #[], #^, _instance, #_notes, _options, _setup_, _setup_info, _temporal_position, #_to_h, #_to_s, _verify, #calendar_name, #clock_name, #copy, #dynamical_time, format, #has_next?, #has_time?, #include?, #inspect, #is?, #month_included, #note?, #notes, #period, #prev, #rate_of_clock, #reference_label, #scan, #strftime, #succ, #time_standard, #to_clock_time, #to_date, #to_datetime, #to_f, #to_i, #to_residue, #to_time, #to_uri, #to_uri_escape, #week_included, #year_included

Methods included from Coordinates

to_deg, to_deg_225, to_dms

Methods included from When

Border, Calendar, CalendarEra, CalendarNote, Clock, Duration, Index, Location, M17n, MonthName, Pair, Residue, Resource, TemporalPosition, Wikipedia, _const_missing, _define_common_calendar_types, _setup_, _setup_info, at, client, column, config, const_missing, era, free_conv, m17n, now, server, today, when?

Methods included from TemporalPosition::Conversion

#julian_date, #tm_pos

Methods included from Parts::Resource

#[], #^, _abbreviation_to_iri, _decode, _encode, _extract_prefix, _instance, _instantiate, _parse, _path_with_prefix, _replace_tags, _setup_, _setup_info, _simplify_path, base_uri, #each, #enum_for, #hierarchy, #include?, #included?, #iri, #leaf?, #m17n, #map, #next, #parent, #prev, #registered?, root_dir

Methods included from Parts::Resource::Pool

#[], #[]=, #_pool, #_setup_, #pool_keys

Methods included from Parts::Resource::Synchronize

#synchronize

Constructor Details

#initialize(date, time, options = {}) ⇒ DateAndTime

オブジェクトの生成

Options Hash (options):



2241
2242
2243
2244
# File 'lib/when_exe/tmposition.rb', line 2241

def initialize(date, time, options={})
  options[:time] = time
  super(date, options)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class When::TM::TemporalPosition

Instance Attribute Details

#clk_timeWhen::TM::ClockTime (readonly) Also known as: clkTime

時刻要素



2034
2035
2036
# File 'lib/when_exe/tmposition.rb', line 2034

def clk_time
  @clk_time
end

Instance Method Details

#&(other) ⇒ When::TM::DateAndTime

ユリウス日または通年が指定の剰余となる日

Raises:

  • (TypeError)


2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
# File 'lib/when_exe/tmposition.rb', line 2090

def &(other)
  raise TypeError,"The right operand should be When::Coordinates::Residue" unless other.kind_of?(Residue)
  case other.event
  when 'day'
    # 指定の剰余となる日
    sdn     = other & to_i
    options = {:date=>_date_with_era(@frame.to_cal_date(sdn)), :time=>@clk_time.clk_time.dup,
               :events=>nil, :query=>@query, :validate=>:done}
    options[:precision] = When::DAY if precision < When::DAY
    result  = self.dup._copy(options)
    result.send(:_force_euqal_day, sdn-result.to_i)

  when 'year'
    # 指定の剰余となる年
    date     = @frame.send(:_decode, _date_without_era)
    date[0]  = (other & (date[0] + @frame.diff_to_CE)) - @frame.diff_to_CE
    options  = {:date=>_date_with_era(@frame.send(:_encode, date)), :time=>@clk_time.clk_time.dup,
                :events=>nil, :query=>@query}
    options[:precision] = When::YEAR if precision < When::YEAR
    return self.dup._copy(options)

  else
    raise ArgumentError,"The right operand should have a unit 'day' or 'year'"
  end
end

#_attrObject

属性の Hash



2200
2201
2202
# File 'lib/when_exe/tmposition.rb', line 2200

def _attr
  super.merge({:clock=>clock})
end

#_copy(options = {}) ⇒ Object

属性のコピー



2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
# File 'lib/when_exe/tmposition.rb', line 2206

def _copy(options={})
  # 夏時間の調整
  case options[:time]
  when Array
    if clock._need_validate
      if @calendar_era_props
        date     = options[:date].dup
        date[0] += calendar_era_epoch
      else
        date     = options[:date]
      end
      new_clock = clock._daylight([@frame, date, options[:time]])
      options[:time] = options[:time].map {|t| t * 1}
    else
      new_clock = clock
    end
    options[:time] = @clk_time.dup._copy(options.merge({:clock=>new_clock}))
  when nil
    options[:time] = @clk_time.dup._copy(options)
  end

  return super(options)
end

#ceil(digit = DAY, precision = digit) ⇒ When::TM::DateAndTime

下位桁の切り上げ



2163
2164
2165
2166
2167
2168
2169
2170
# File 'lib/when_exe/tmposition.rb', line 2163

def ceil(digit=DAY, precision=digit)
  length  = clock.indices.length
  count   = digit - length
  period  = PeriodDuration.new((count<=0) ? 1 : 0.1**count, digit, (-@frame.indices.length)..length)
  result  = floor(digit, precision) + period
  result += clock.tz_difference if (result.universal_time <= self.universal_time)
  return result
end

#clockWhen::TM::Clock

時法の取得



2041
2042
2043
# File 'lib/when_exe/tmposition.rb', line 2041

def clock
  @clk_time.frame
end

#floor(digit = DAY, precision = digit) ⇒ When::TM::DateAndTime

下位桁の切り捨て



2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
# File 'lib/when_exe/tmposition.rb', line 2124

def floor(digit=DAY, precision=digit)
  count    = digit - clock.indices.length

  if digit>=DAY
    date     = @cal_date.dup
  elsif @calendar_era_props
    date     = @cal_date.dup
    date[0] += calendar_era_epoch
    date     = @frame._validate(date[0..(digit-1)])
    date[0] -= calendar_era_epoch
  else
    date     = @frame._validate(@cal_date[0..(digit-1)])
  end

  time     = @clk_time.clk_time[0..((digit<=DAY) ? 0 : ((count>=0) ? -1 : digit))]
  time[0] += to_i
  time     = clock._validate(time)
  time[0] -= to_i

  if (count >= 0)
    factor = 10**count
    time[-1] = (time[-1] * factor).floor.to_f / factor
  end

  # オブジェクトの生成
  options = {:date=>date, :validate=>:done, :events=>nil, :query=>nil,
             :time=>(digit<=DAY) ? time : @clk_time.dup._copy({:time=>time})}
  options[:precision] = precision if precision
  return self.dup._copy(options)
end

#hour(d = 0) ⇒ Numeric



1475
1476
1477
# File 'lib/when_exe/inspect.rb', line 1475

def hour(d=0)
  @clk_time.hour(d)
end

#local_timeNumeric

内部時間(ローカル)

Raises:

  • (NameError)


2067
2068
2069
2070
2071
# File 'lib/when_exe/tmposition.rb', line 2067

def local_time
  return super if [Now, Max, Min].include?(@indeterminated_position)
  raise NameError, "Temporal Reference System is not defined" unless (@frame && clock)
  @local_time ||= (to_i - JulianDate::JD19700101) * Duration::DAY + @clk_time.local_time(to_i)
end

#locationWhen::Coordinates::Spatial

位置情報



2176
2177
2178
# File 'lib/when_exe/tmposition.rb', line 2176

def location
  @location ||= @clk_time.frame.location
end

#minute(d = 0) ⇒ Numeric Also known as: min



1485
1486
1487
# File 'lib/when_exe/inspect.rb', line 1485

def minute(d=0)
  @clk_time.minute(d)
end

#name(index, format = nil) ⇒ When::BasicTypes::M17n

要素の多言語対応文字列化



1431
1432
1433
1434
# File 'lib/when_exe/inspect.rb', line 1431

def name(index, format=nil)
  digit = _digit(index)
  (digit <= DAY) ? super : @clk_time.name(digit, format)
end

#second(d = 0) ⇒ Numeric Also known as: sec



1496
1497
1498
# File 'lib/when_exe/inspect.rb', line 1496

def second(d=0)
  @clk_time.second(d)
end

#to_cal_dateWhen::TM::CalDate Also known as: to_CalDate

時刻情報のない When::TM::CalDate を返す



2184
2185
2186
2187
2188
2189
# File 'lib/when_exe/tmposition.rb', line 2184

def to_cal_date
  options = _attr
  options.delete(:clock)
  options[:precision] = [When::DAY, options[:precision]].min
  CalDate.new(@cal_date, options)
end

#to_m17n(precision = @precision, round = false) ⇒ When::BasicTypes::M17n

Note:

丸めるのは precision が When::DAY よりも高精度の場合のみである

多言語対応文字列化 - When.exe Standard Representation により多言語対応文字列化する



1444
1445
1446
# File 'lib/when_exe/inspect.rb', line 1444

def to_m17n(precision=@precision, round=false)
  super + _clk_time_for_inspect(round ? precision : nil).to_m17n(precision)
end

#to_s(precision = @precision, round = false) ⇒ String

Note:

丸めるのは precision が When::DAY よりも高精度の場合のみである

文字列化 -When.exe Standard Representation により文字列化する



1456
1457
1458
# File 'lib/when_exe/inspect.rb', line 1456

def to_s(precision=@precision, round=false)
  super + _clk_time_for_inspect(round ? precision : nil).to_s(precision)
end

#universal_timeNumeric

内部時間

Raises:

  • (NameError)


2053
2054
2055
2056
2057
# File 'lib/when_exe/tmposition.rb', line 2053

def universal_time
  return super if [Now, Max, Min].include?(@indeterminated_position)
  raise NameError, "Temporal Reference System is not defined" unless (@frame && clock)
  @universal_time ||= (to_i - JulianDate::JD19700101) * Duration::DAY + @clk_time.universal_time(to_i)
end

#value(index) ⇒ Numeric

要素の参照



2079
2080
2081
2082
# File 'lib/when_exe/tmposition.rb', line 2079

def value(index)
  digit = _digit(index)
  return (digit <= DAY) ? @cal_date[digit-1] : @clk_time.clk_time[digit]
end