Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions lib/csv.rb
Original file line number Diff line number Diff line change
Expand Up @@ -875,10 +875,9 @@ def initialize(message, line_number)
# A Regexp used to find and convert some common DateTime formats.
DateTimeMatcher =
/ \A(?: (\w+,?\s+)?\w+\s+\d{1,2}\s+\d{1,2}:\d{1,2}:\d{1,2},?\s+\d{2,4} |
\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2} |
# ISO-8601
# ISO-8601 and RFC-3339 (space instead of T) recognized by DateTime.parse
\d{4}-\d{2}-\d{2}
(?:T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?(?:[+-]\d{2}(?::\d{2})|Z)?)?)?
(?:[T\s]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?(?:[+-]\d{2}(?::\d{2})|Z)?)?)?
)\z /x

# The encoding used by all converters.
Expand Down
85 changes: 85 additions & 0 deletions test/csv/test_data_converters.rb
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,89 @@ def test_builtin_date_time_converter_iso8601_utc
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_minute
iso8601_string = "2018-01-14 22:25"
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you use rfc3339_string instead of iso8601_string because this is not ISO 8601 format?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done.

datetime = DateTime.new(2018, 1, 14, 22, 25)
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_second
iso8601_string = "2018-01-14 22:25:19"
datetime = DateTime.new(2018, 1, 14, 22, 25, 19)
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_under_second
iso8601_string = "2018-01-14 22:25:19.1"
datetime = DateTime.new(2018, 1, 14, 22, 25, 19.1)
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_under_second_offset
iso8601_string = "2018-01-14 22:25:19.1+09:00"
datetime = DateTime.new(2018, 1, 14, 22, 25, 19.1, "+9")
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_offset
iso8601_string = "2018-01-14 22:25:19+09:00"
datetime = DateTime.new(2018, 1, 14, 22, 25, 19, "+9")
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_utc
iso8601_string = "2018-01-14 22:25:19Z"
datetime = DateTime.new(2018, 1, 14, 22, 25, 19)
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_tab_minute
iso8601_string = "2018-01-14\t22:25"
datetime = DateTime.new(2018, 1, 14, 22, 25)
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_tab_second
iso8601_string = "2018-01-14\t22:25:19"
datetime = DateTime.new(2018, 1, 14, 22, 25, 19)
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_tab_under_second
iso8601_string = "2018-01-14\t22:25:19.1"
datetime = DateTime.new(2018, 1, 14, 22, 25, 19.1)
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_tab_under_second_offset
iso8601_string = "2018-01-14\t22:25:19.1+09:00"
datetime = DateTime.new(2018, 1, 14, 22, 25, 19.1, "+9")
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_tab_offset
iso8601_string = "2018-01-14\t22:25:19+09:00"
datetime = DateTime.new(2018, 1, 14, 22, 25, 19, "+9")
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

def test_builtin_date_time_converter_rfc3339_tab_utc
iso8601_string = "2018-01-14\t22:25:19Z"
datetime = DateTime.new(2018, 1, 14, 22, 25, 19)
assert_equal(datetime,
CSV::Converters[:date_time][iso8601_string])
end

Comment thread
kou marked this conversation as resolved.
Outdated
end