在 Rails 中,我看到我有几个选项可以解析日期和日期时间。仅出于通过 ActiveRecord 将日期持久保存到数据库中的目的而解析日期的最佳做法是什么?为什么?
Time.zone.parse(...)
Time.parse(...)
DateTime.parse(...)
在 Rails 中,我看到我有几个选项可以解析日期和日期时间。仅出于通过 ActiveRecord 将日期持久保存到数据库中的目的而解析日期的最佳做法是什么?为什么?
Time.zone.parse(...)
Time.parse(...)
DateTime.parse(...)
如果您只想写入 ActiveRecord,请使用 Time.zone.parse。
应避免使用日期时间。如果你正在处理日期,你应该使用 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 将返回一个时间,如果它在输入中指定,则带有一个区域,或本地 TZ。
> Time.parse("12:30")
=> 2012-05-09 12:30:00 -0700
有关 Ruby 时间比较和精度的更详细说明,请阅读此博客文章:
http://blog.solanolabs.com/rails-time-comparisons-devil-details-etc/
ActiveRecord 自动设置的时间(例如created_at
和updated_at
)作为ActiveSupport::TimeWithZone
实例返回。
根据文档,ActiveSupport::TimeWithZone
并且Time
具有相同的 API,Time
我将使用相同的 API。
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