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-0.2.9/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
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-0.2.9/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