12

在 Rails 中,我看到我有几个选项可以解析日期和日期时间。仅出于通过 ActiveRecord 将日期持久保存到数据库中的目的而​​解析日期的最佳做法是什么?为什么?

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

2 回答 2

18

如果您只想写入 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/

于 2012-05-10T01:48:37.583 回答
2

ActiveRecord 自动设置的时间(例如created_atupdated_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
于 2012-05-10T01:41:48.090 回答