在 Rails 中,如何在我的 CSV 文件中将我的日期输出为以毫秒为单位的时间?
In Rails, how do I output my date as a time in milliseconds in my CSV file?
我正在使用 Rails 5.0.1。我使用以下代码将我的 table 数据输出为 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
我希望它以毫秒为单位的时间输出。我如何调整以上内容以将我的时间输出为以毫秒为单位的时间而不是默认的日期格式?
您可以简单地在 DateTime 对象上调用 .to_i
:
timestamp = DateTime.now.to_i
# => 1501617998
DateTime.strptime(timestamp.to_s, '%s')
# => Tue, 01 Aug 2017 20:07:10 +0000
时间戳是自大纪元以来的秒数。将它乘以一千,得到毫秒。
在你的情况下,你必须为这种情况做一个钩子:
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
这意味着每次属性 returns 一个 DateTime 对象时,它都会被转换为时间戳 * 1000。如果你只想过滤几个属性来转换 DateTime -> Timestamp,测试 attr
使用白名单而不是测试 attr_value
的 class.
我正在使用 Rails 5.0.1。我使用以下代码将我的 table 数据输出为 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
我希望它以毫秒为单位的时间输出。我如何调整以上内容以将我的时间输出为以毫秒为单位的时间而不是默认的日期格式?
您可以简单地在 DateTime 对象上调用 .to_i
:
timestamp = DateTime.now.to_i
# => 1501617998
DateTime.strptime(timestamp.to_s, '%s')
# => Tue, 01 Aug 2017 20:07:10 +0000
时间戳是自大纪元以来的秒数。将它乘以一千,得到毫秒。
在你的情况下,你必须为这种情况做一个钩子:
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
这意味着每次属性 returns 一个 DateTime 对象时,它都会被转换为时间戳 * 1000。如果你只想过滤几个属性来转换 DateTime -> Timestamp,测试 attr
使用白名单而不是测试 attr_value
的 class.