Module XSD::XSDDateTimeImpl
In: xsd/datatypes.rb

Methods

add_tz   of2tz   screen_data   to_date   to_datetime   to_obj   to_time   tz2of  

Constants

SecInDay = 86400

Public Instance methods

[Source]

# File xsd/datatypes.rb, line 582
  def add_tz(s)
    s + of2tz(@data.offset)
  end

[Source]

# File xsd/datatypes.rb, line 551
  def of2tz(offset)
    diffmin = offset * 24 * 60
    if diffmin.zero?
      'Z'
    else
      ((diffmin < 0) ? '-' : '+') << format('%02d:%02d',
        (diffmin.abs / 60.0).to_i, (diffmin.abs % 60.0).to_i)
    end
  end

[Source]

# File xsd/datatypes.rb, line 561
  def screen_data(t)
    # convert t to a DateTime as an internal representation.
    if t.respond_to?(:to_datetime)      # 1.9 or later
      t.to_datetime
    elsif t.is_a?(DateTime)
      t
    elsif t.is_a?(Date)
      t = screen_data_str(t)
      t <<= 12 if t.year < 0
      t
    elsif t.is_a?(Time)
      jd = DateTime.civil_to_jd(t.year, t.mon, t.mday, DateTime::ITALY)
      fr = DateTime.time_to_day_fraction(t.hour, t.min, [t.sec, 59].min) +
        t.usec.to_r / 1000000 / SecInDay
      of = t.utc_offset.to_r / SecInDay
      DateTime.new0(DateTime.jd_to_ajd(jd, fr, of), of, DateTime::ITALY)
    else
      screen_data_str(t)
    end
  end

[Source]

# File xsd/datatypes.rb, line 526
  def to_date
    Date.new0(@data.class.jd_to_ajd(@data.jd, 0, 0), 0, @data.start)
  end

[Source]

# File xsd/datatypes.rb, line 530
  def to_datetime
    data
  end

[Source]

# File xsd/datatypes.rb, line 498
  def to_obj(klass)
    if klass == Time
      to_time
    elsif klass == Date
      to_date
    elsif klass == DateTime
      to_datetime
    else
      nil
    end
  end

[Source]

# File xsd/datatypes.rb, line 510
  def to_time
    begin
      if @data.offset * SecInDay == Time.now.utc_offset
        d = @data
        usec = (d.sec_fraction * SecInDay * 1000000).round
        Time.local(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec)
      else
        d = @data.newof
        usec = (d.sec_fraction * SecInDay * 1000000).round
        Time.gm(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec)
      end
    rescue ArgumentError
      nil
    end
  end

[Source]

# File xsd/datatypes.rb, line 534
  def tz2of(str)
    /^(?:Z|(?:([+\-])(\d\d):(\d\d))?)$/ =~ str
    sign = $1
    hour = $2.to_i
    min = $3.to_i

    of = case sign
      when '+'
        of = +(hour.to_r * 60 + min) / 1440    # 24 * 60
      when '-'
        of = -(hour.to_r * 60 + min) / 1440    # 24 * 60
      else
        0
      end
    of
  end

[Validate]