我正在使用Rails 5.0.1。我使用以下代码将表格数据输出为CSV格式...
def self.to_csv(from_date, to_date)
attributes = %w{index_date value} #customize columns here
values = CryptoIndexValue.where('index_date >= ? and index_date <= ?', from_date, to_date)
.order(index_date: :desc)
CSV.generate(headers: true) do |csv|
csv << attributes
values.each do |value|
csv << attributes.map{ |attr| value.send(attr) }
end
end
end
问题是,当输出我的日期(PostGres 9.5时间戳列)时,输出为
2017-08-01 20:00:09 UTC
我希望以毫秒为单位输出时间。如何调整上面的时间以毫秒而不是默认日期格式输出我的时间?
答案 0 :(得分:1)
您只需在DateTime对象上调用.to_i
:
timestamp = DateTime.now.to_i
# => 1501617998
DateTime.strptime(timestamp.to_s, '%s')
# => Tue, 01 Aug 2017 20:07:10 +0000
时间戳是Epoch以来的秒数。将它乘以一千,你得到几毫秒。
在你的情况下,你必须为这种情况勾选:
attr_values = attributes.map do |attr|
attr_value = value.send(attr)
attr_value = attr_value.to_i * 1000 if attr_value.is_a?(DateTime)
attr_value
end
csv << attr_values
这意味着每次属性返回DateTime对象时,它都会转换为时间戳* 1000.如果您只想过滤几个attrs来转换DateTime - &gt;时间戳,使用白名单测试attr
,而不是测试attr_value
的课程。