12

Rails では、日付と日時を解析するためのオプションがいくつかあります。ActiveRecordを介してDBに永続化するという唯一の目的で日付を解析するためのベストプラクティスは何ですか? なぜ?

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

2 に答える 2

18

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/

于 2012-05-10T01:48:37.583 に答える
2

ActiveRecord によって自動的に設定された時刻 (created_atおよび などupdated_at) は、インスタンスとして返されActiveSupport::TimeWithZoneます。

ドキュメントによると、同じAPIを持っているので、ActiveSupport::TimeWithZone私が使用するものです。TimeTime

無関係なことですが、文字列に対して呼び出すことができるメソッド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 に答える