如何控制Ruby CSV使用的输出格式?

时间:2014-03-06 18:38:32

标签: ruby csv

我希望能够在生成csv输出时更改CSV使用的日期和时间格式。例如,我不想为某个日期生成“2004-1-30”,而是希望它生成'1/30/2004'。

我该怎么做?

1 个答案:

答案 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。如果数据无法转码,转换将失败,保持字段不变。