在Rails中,我看到我有几个选项来解析日期和日期时间。解析日期的最佳做法是什么,其唯一目的是通过ActiveRecord将它们保存到数据库中?为什么?
Time.zone.parse(...)
Time.parse(...)
DateTime.parse(...)
答案 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_at
和updated_at
)会以ActiveSupport::TimeWithZone
个实例的形式返回。
根据文档,ActiveSupport::TimeWithZone
和Time
具有相同的API,因此我会使用Time
。
在不相关的说明中,您可以在字符串上调用方法to_time
和to_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