为什么只有 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('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
我想从 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('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