This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Parsing Dates Fuzzily or Precisely | ||
|---|---|---|
| Code | Expected | Actual |
require 'date'
Date.parse('2/9/2007').to_s |
"2007-02-09" | "2007-02-09" |
DateTime.parse('02-09-2007 12:30:44 AM').to_s |
"2007-09-02T00:30:44Z" | "2007-09-02T00:30:44Z" |
DateTime.parse('02-09-2007 12:30:44 PM EST').to_s |
"2007-09-02T12:30:44-0500" | "2007-09-02T12:30:44-0500" |
Date.parse('Wednesday, January 10, 2001').to_s |
"2001-01-10" | "2001-01-10" |
Date.parse('2/9/07').to_s |
"0007-02-09" | "0007-02-09" |
american_date = '%m/%d/%y'
Date.strptime('2/9/07', american_date).to_s |
"2007-02-09" | "2007-02-09" |
DateTime.strptime('2/9/05', american_date).to_s |
"2005-02-09T00:00:00Z" | "2005-02-09T00:00:00Z" |
Date.strptime('2/9/68', american_date).to_s |
"2068-02-09" | "2068-02-09" |
Date.strptime('2/9/69', american_date).to_s |
"1969-02-09" | "1969-02-09" |
european_date = '%d/%m/%y'
Date.strptime('2/9/07', european_date).to_s |
"2007-09-02" | "2007-09-02" |
Date.strptime('02/09/68', european_date).to_s |
"2068-09-02" | "2068-09-02" |
Date.strptime('2/9/69', european_date).to_s |
"1969-09-02" | "1969-09-02" |
four_digit_year_date = '%m/%d/%Y'
Date.strptime('2/9/2007', four_digit_year_date).to_s |
"2007-02-09" | "2007-02-09" |
Date.strptime('02/09/1968', four_digit_year_date).to_s |
"1968-02-09" | "1968-02-09" |
Date.strptime('2/9/69', four_digit_year_date).to_s |
"0069-02-09" | "0069-02-09" |
date_and_time = '%m-%d-%Y %H:%M:%S %Z'
DateTime.strptime('02-09-2007 12:30:44 EST', date_and_time).to_s |
"2007-02-09T12:30:44-0500" | "2007-02-09T12:30:44-0500" |
DateTime.strptime('02-09-2007 12:30:44 PST', date_and_time).to_s |
"2007-02-09T12:30:44-0800" | "2007-02-09T12:30:44-0800" |
DateTime.strptime('02-09-2007 12:30:44 GMT', date_and_time).to_s |
"2007-02-09T12:30:44Z" | "2007-02-09T12:30:44Z" |
twelve_hour_clock_time = '%m-%d-%Y %I:%M:%S %p'
DateTime.strptime('02-09-2007 12:30:44 AM', twelve_hour_clock_time).to_s |
"2007-02-09T00:30:44Z" | "2007-02-09T00:30:44Z" |
DateTime.strptime('02-09-2007 12:30:44 PM', twelve_hour_clock_time).to_s |
"2007-02-09T12:30:44Z" | "2007-02-09T12:30:44Z" |
word_date = '%A, %B %d, %Y'
Date.strptime('Wednesday, January 10, 2001', word_date).to_s |
"2001-01-10" | "2001-01-10" |
Date.parse('1/10/07').to_s |
"0007-01-10" | "0007-01-10" |
Date.parse('2007 1 10').to_s |
ArgumentError: 3 elements of civil date are necessary ... |
ArgumentError: 3 elements of civil date are necessary from /usr/lib/ruby/1.8/date.rb:650:in `new_with_hash' from /usr/lib/ruby/1.8/date.rb:695:in `parse' from (irb):30 from :0 |
TRY_FORMATS = ['%d/%m/%y', '%Y %m %d']
def try_to_parse(s)
parsed = nil
TRY_FORMATS.each do |format|
begin
parsed = strptime(s, format)
break
rescue ArgumentError
end
end
return parsed
end
try_to_parse('1/10/07').to_s |
"2007-10-01" |
Error! (Exception?) Here's stdout: NoMethodError: undefined method `strptime' for main:Object from (irb):36:in `try_to_parse' from (irb):34:in `try_to_parse' from (irb):43 from :0 |
try_to_parse('2007 1 10').to_s |
"2007-01-10" |
Error! (Exception?) Here's stdout: NoMethodError: undefined method `strptime' for main:Object from (irb):36:in `try_to_parse' from (irb):34:in `try_to_parse' from (irb):44 from :0 |
require 'time' mail_received = 'Tue, 1 Jul 2003 10:52:37 +0200' Time.rfc822(mail_received) |
Tue Jul 01 04:52:37 EDT 2003 | Tue Jul 01 04:52:37 EDT 2003 |
last_modified = 'Tue, 05 Sep 2006 16:05:51 GMT' Time.httpdate(last_modified) |
Tue Sep 05 12:05:51 EDT 2006 | Tue Sep 05 12:05:51 EDT 2006 |
timestamp = '2001-04-17T19:23:17.201Z' t = Time.iso8601(timestamp) |
Tue Apr 17 19:23:17 UTC 2001 | Tue Apr 17 19:23:17 UTC 2001 |
t.sec |
17 | 17 |
t.tv_usec |
201000 | 201000 |
t = Time.at(1000000000) |
Sat Sep 08 21:46:40 EDT 2001 | Sat Sep 08 21:46:40 EDT 2001 |
t.rfc822 |
"Sat, 08 Sep 2001 21:46:40 -0400" | "Sat, 08 Sep 2001 21:46:40 -0400" |
t.httpdate |
"Sun, 09 Sep 2001 01:46:40 GMT" | "Sun, 09 Sep 2001 01:46:40 GMT" |
t.iso8601 |
"2001-09-08T21:46:40-04:00" | "2001-09-08T21:46:40-04:00" |