我应该总是用哪个解析日期时间? DateTime,Time,Time.zone?

时间:2012-05-10 01:33:01

标签: ruby-on-rails ruby-on-rails-3

在Rails中,我看到我有几个选项来解析日期和日期时间。解析日期的最佳做法是什么,其唯一目的是通过ActiveRecord将它们保存到数据库中?为什么?

Time.zone.parse(...)
Time.parse(...)
DateTime.parse(...)

2 个答案:

答案 0 :(得分:17)

如果您只想写入ActiveRecord,请使用Time.zone.parse。

应避免使用DateTime。如果您正在处理日期,则应使用Date.parse。

除此之外,还取决于输入是否附带时区信息,当前时区设置的内容以及您是否需要数据中的时区。

Time.zone.parse将返回一个ActiveSupport :: TimeWithZone,默认为UTC。

> Time.zone.parse("12:30")
=> Thu, 10 May 2012 12:30:00 UTC +00:00 

Time.parse将返回一个Time,如果在输入中指定了区域,则返回一个区域。

> Time.parse("12:30")
=> 2012-05-09 12:30:00 -0700 

有关Ruby时间比较和精确度的更详细说明,请阅读以下博文:

http://blog.solanolabs.com/rails-time-comparisons-devil-details-etc/

答案 1 :(得分:2)

ActiveRecord自动设置的时间(例如created_atupdated_at)会以ActiveSupport::TimeWithZone个实例的形式返回。

根据文档,ActiveSupport::TimeWithZoneTime具有相同的API,因此我会使用Time

在不相关的说明中,您可以在字符串上调用方法to_timeto_datetime

"2012-05-09".to_time # => 2012-05-09 00:00:00 UTC 
"2012-05-09".to_datetime # => Wed, 09 May 2012 00:00:00 +0000