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
# File 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
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"
# File 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