您问的是如何使用转换器。
我的示例定义了新转换器的用法mytime
。
如果可能的话,转换器 my_time 尝试构建一个时间对象。
#Define test data
src = <<csv
textfield,datetimefield,numfield
foo,2008-07-01 17:50:55.004688,1
bar,2008-07-02 17:50:55.004688,2
csv
require 'csv'
require 'time'
CSV::Converters[:mytime] = lambda{|s|
begin
Time.parse(s)
rescue ArgumentError
s
end
}
csv = CSV(src, :headers => true, :converters => [:mytime])
csv.each do |row|
print "#{row}"
the_date = row['datetimefield'].to_date
end
使用这种技术,您还可以定义一个转换器来从类似时间的字符串创建日期。该解决方案还保留所有其他转换器。
#define test data
src = <<csv
textfield,datetimefield,numfield
foo,2008-07-01 17:50:55.004688,1
bar,2008-07-02 17:50:55.004688,2
csv
require 'csv'
require 'time'
CSV::Converters[:time2date] = lambda{|s|
begin
Time.parse(s).to_date
rescue ArgumentError
s
end
}
csv = CSV(src, :headers => true, :converters => CSV::Converters.keys + [:time2date])
csv.each do |row|
print "#{row}"
p row['datetimefield'] #Date-field
end