Я не знаю, как, но моя консоль и мой сервер имеют два разных часовых пояса для DateTime.now. Если я бегу DateTime.Now в моей консоли следующее возвращается:rails - конвертировать DateTime в UTC перед сохранением на сервер
Wed, 04 Dec 2013 14:27:23 -0500
Однако, я следующий в моей целевой модели:
def self.already_expired
where("time_frame < ?", DateTime.now)
end
Цель кода выше, чтобы выстрелить некоторые методы задачи по задачам, где «time_Frame» - прошедшая дата. Вот где я вызвать метод:
task :change_it => :environment do
puts "yo yo you yo you"
@tasks = Task.already_expired
@tasks.each do |task|
puts "Kalabar" + task.inspect + "now time is:" + DateTime.now.to_s
end
end
Логи сервера показать это:
Task Load (1.2ms) SELECT "tasks".* FROM "tasks" WHERE (time_frame < '2013-12-04 17:25:37')
Kalabar#<Task id: 3, title: "task 1 - past", content: "Should show this one",
created_at: "2013-12-04 17:05:53", updated_at: "2013-12-04 17:05:53",
schedule_id: 2, amount: nil, time_frame: "2013-12-02 08:15:00">
now time is:2013-12-04T12:25:37-05:00
Kalabar#<Task id: 5, title: "another task - past",
content: "should show this one", created_at: "2013-12-04 17:11:23",
updated_at: "2013-12-04 17:11:23", schedule_id: 3, amount: nil,
time_frame: "2013-12-03 02:07:00">now time is:2013-12-04T12:25:37-05:00
Kalabar#<Task id: 6, title: "another task - future",
content: "should not show at first", created_at: "2013-12-04 17:11:23",
updated_at: "2013-12-04 17:25:09", schedule_id: 3, amount: nil,
time_frame: "2013-12-04 12:27:00">now time is:2013-12-04T12:25:37-05:00
Таким образом, сравниваемые time_frame к «2013-12-04 12:25:37, который UTC. Однако, когда у меня есть печать DateTime.now.to_s, она печатает '2012-12-04 08:15:00'.
Я хочу преобразовать все в UTC, прежде чем он войдет в базу данных. Я также не понимаю, почему она имеет два разных часовых поясов для DateTime.Now Вот мои вопросы
- Почему существуют два разных часовых поясов для DateTime.now
- Как конвертировать часовых поясов в UTC, прежде чем они сохранить база данных?
UPDATE:
Я поставил следующий в моем application.rb файл:
config.time_zone = 'Eastern Time (US & Canada)'
А теперь пользователь вводит в DateTime в восточном время, и она будет храниться как время UTC , Итак, теперь time_frame сравнивается с DateTime.now правильно. Проблема в том, что если я помещаю time_frame, он помещает его в восточное время. Я не совсем уверен, что происходит. Он хранит его в UTC, но печатает его в восточное время. Это опасно/правильно? Я добавил «ставит time_Frame» в целевой блок кода:
task :change_it => :environment do
@tasks = Task.already_expired
@tasks.each do |task|
puts "Kalabar" + task.inspect + "now time is:" + DateTime.now.to_s
puts "time_frame is:" + task.time_frame.to_s
end
end
и выводит это:
Kalabar#<Task id: 3, title: "task 1 - past", content: "Should show this one", created_at: "2013-12-04 17:05:53", updated_at: "2013-12-04 17:05:53", schedule_id: 2, amount: nil, time_frame: "2013-12-02 08:15:00">now time is:2013-12-04T15:27:22-05:00
time_frame is:2013-12-02 03:15:00 -0500
Kalabar#<Task id: 7, title: "Task 1 - past by days", content: "Should always show", created_at: "2013-12-04 20:20:40", updated_at: "2013-12-04 20:20:40", schedule_id: 4, amount: nil, time_frame: "2013-12-02 09:02:00">now time is:2013-12-04T15:27:22-05:00
time_frame is:2013-12-02 04:02:00 -0500
Kalabar#<Task id: 8, title: "Task 2 - past by minutes", content: "should always show", created_at: "2013-12-04 20:20:40", updated_at: "2013-12-04 20:20:40", schedule_id: 4, amount: nil, time_frame: "2013-12-04 20:15:00">now time is:2013-12-04T15:27:22-05:00
time_frame is:2013-12-04 15:15:00 -0500
Итак, как вы можете видеть, в базе данных она является UTC, но когда он говорит, что это в восточном. Почему это делается/это опасно?
Я пробовал это. Кажется, это не работает. Что-то не так с моим кодом: Time.zone = 'UTC' – Philip7899
Вам нужно установить его так: 'config.time_zone = 'Central Time (US & Canada)'', используйте 'rake time: zones: all' to см. список названий часовых поясов. – NARKOZ
Спасибо, я попробовал, и это сработало (слегка/я думаю). Я обновил вопрос. – Philip7899