我希望能够在生成csv输出时更改CSV使用的日期和时间格式。例如,我不想为某个日期生成“2004-1-30”,而是希望它生成'1/30/2004'。
我该怎么做?
答案 0 :(得分:3)
这是一个完整的例子:
require 'csv'
require 'date'
str = <<_
2004-1-30,foo
2004-11-20,bar
_
File.write('a',str)
CSV::Converters[:cdate] = lambda do |s|
begin
Date.strptime(s,"%Y-%m-%d").strftime("%-m/%d/%Y")
rescue ArgumentError
s
end
end
CSV.foreach('a',:converters => :cdate) do |row|
p row
end
# >> ["1/30/2004", "foo"]
# >> ["11/20/2004", "bar"]
查看Converters
的文档。
转换器
Hash
和/或lambdas
中处理自定义转化的名称数组。 单个转换器不必位于数组中。所有内置转换器尝试在转换之前将字段转码为UTF-8。如果数据无法转码,转换将失败,保持字段不变。