Rails では、日付と日時を解析するためのオプションがいくつかあります。ActiveRecordを介してDBに永続化するという唯一の目的で日付を解析するためのベストプラクティスは何ですか? なぜ?
Time.zone.parse(...)
Time.parse(...)
DateTime.parse(...)
Rails では、日付と日時を解析するためのオプションがいくつかあります。ActiveRecordを介してDBに永続化するという唯一の目的で日付を解析するためのベストプラクティスは何ですか? なぜ?
Time.zone.parse(...)
Time.parse(...)
DateTime.parse(...)
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、またはローカル 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
ます。
ドキュメントによると、同じAPIを持っているので、ActiveSupport::TimeWithZone
私が使用するものです。Time
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