123456789_123456789_123456789_123456789_123456789_

Class: Time

Relationships & Source Files
Inherits: Object
Defined in: lib/rss/rss.rb

Class Method Summary

  • .w3cdtf(date)

    This method converts a W3CDTF string date/time format to Time object.

Instance Method Summary

  • #w3cdtf

    This method converts a Time object to a String.

Class Method Details

.w3cdtf(date)

This method converts a W3CDTF string date/time format to Time object.

The W3CDTF format is defined here: www.w3.org/TR/NOTE-datetime

Time.w3cdtf('2003-02-15T13:50:05-05:00')
# => 2003-02-15 10:50:05 -0800
Time.w3cdtf('2003-02-15T13:50:05-05:00').class
# => Time
[ GitHub ]

  
# File 'lib/rss/rss.rb', line 15

def w3cdtf(date)
  if /\A\s*
      (-?\d+)-(\d\d)-(\d\d)
      (?:T
      (\d\d):(\d\d)(?::(\d\d))?
      (\.\d+)?
      (Z|[+-]\d\d:\d\d)?)?
      \s*\z/ix =~ date and (($5 and $8) or (!$5 and !$8))
    datetime = [$1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i]
    usec = 0
    usec = $7.to_f * 1000000 if $7
    zone = $8
    if zone
      off = zone_offset(zone, datetime[0])
      datetime = apply_offset(*(datetime + [off]))
      datetime << usec
      time = Time.utc(*datetime)
      force_zone!(time, zone, off)
      time
    else
      datetime << usec
      Time.local(*datetime)
    end
  else
    raise ArgumentError.new("invalid date: #{date.inspect}")
  end
end

Instance Method Details

#w3cdtf

This method converts a Time object to a String. The String contains the time in W3CDTF date/time format.

The W3CDTF format is defined here: www.w3.org/TR/NOTE-datetime

Time.now.w3cdtf
# => "2013-08-26T14:12:10.817124-07:00"
[ GitHub ]

  
# File 'lib/rss/rss.rb', line 53

def w3cdtf
  if usec.zero?
    fraction_digits = 0
  else
    fraction_digits = strftime('%6N').index(/0*\z/)
  end
  xmlschema(fraction_digits)
end