为什么只有 DateTime.new returns 年?

Why DateTime.new returns year only?

我想从 YAML 文件

中在 seeds.rb 中播种 DateTime

这是来自 seeds.rb

的代码
created_at: DateTime.new("#{post['created_at']}".to_i)

并在帖子 YAML 文件中:

created_at: 2010-04-16

这个输出是created_at: "2010-01-01 00:00:00"

问题是:YAML 文件中 created_at 应该是什么格式?

使用DateTime#parse:

DateTime.parse('2010-04-16')
#⇒ Fri, 16 Apr 2010 00:00:00 +0000

以你的例子为例:

created_at: DateTime.parse(post['created_at'])

如果 post['created_at'] 已经是 DateTime 的一个实例(例如加载了 YAML),只需按原样分配它:

created_at: post['created_at']

当您检查 "2010-04-16".to_i 时,您会得到 2010。因此您调用 DateTime.new(2010) 并获得您看到的结果。

您不能使用字符串本身,DateTime.new("2010-04-16") 会出现类型错误。

但是 Yaml 在解析 2010-04-16 时已经转换为日期,所以我想你可以使用 post['created_at'].to_datetime

完整原始 ruby 示例:

require 'yaml'
require 'date'
post = YAML.load('created_at: 2010-04-16')
p post['created_at']  #-> #<Date: 2010-04-16 ((2455303j,0s,0n),+0s,2299161j)>
p post['created_at'].to_datetime #-> #<DateTime: 2010-04-16T00:00:00+00:00 ((2455303j,0s,0n),+0s,2299161j)>

你的seeds.rb可能看起来像

created_at: post['created_at'].to_datetime