Почему DateTime.new возвращает только год? - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу заполнить DateTime в seed.rb из файла YAML

это код из seed.rb

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

и в сообщениях YAML файла:

created_at: 2010-04-16

Выходные данные: created_at: "2010-01-01 00:00:00"

Вопрос в том, в каком формате должен быть создан create_at в файле YAML?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Когда вы проверяете "2010-04-16".to_i, вы получаете 2010. Таким образом, вы звоните DateTime.new(2010) и получаете результат, который видите.

Вы не можете использовать саму строку, с DateTime.new("2010-04-16") вы получаете типошибка.

Но Yaml конвертирует уже в дату, когда он анализирует 2010-04-16, поэтому я думаю, что вы можете использовать post['created_at'].to_datetime

Пример полного необработанного рубина:

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)>

Ваш seed.rb может выглядеть как

created_at: post['created_at'].to_datetime
0 голосов
/ 22 ноября 2018

Использование 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']
...