さまざまなユーザーに代わって電子メールを受信するアプリケーションがあり、これらのユーザーの受信トレイ ( Mail
gem を使用して IMAP を介して取得) にはさまざまなタイムゾーンがあります。例えば:
Loading development environment (Rails 3.2.12)
2.0.0-p247 :001 > first = Email.all[0].datetime
=> Mon, 04 Feb 2013 07:05:28 +0000
2.0.0-p247 :002 > second = Email.all[1].datetime
=> Wed, 21 Aug 2013 11:54:49 +0200
私のアプリケーションのユーザーはさまざまなタイムゾーンにいるため、それぞれのタイムゾーンを示すデータベース フィールドがあります。これは、例えば"+0000"
、または"-0500"
. 元のタイムゾーンを傍受し、時間をユーザーのタイムゾーンに変換するコードが必要です。
例えば:
class User
include Mongoid::Document
field :timezone, :type => String, :default => "+0200"
has_many :emails, :inverse_of => :user
end
class Email
include Mongoid::Document
field :datetime, :type => DateTime
belongs_to :user, :inverse_of => :emails
end
Loading development environment (Rails 3.2.12)
2.0.0-p247 :001 > email = User.first.emails.first
=> #<Email ... >
2.0.0-p247 :002 > datetime = email.datetime
=> Mon, 04 Feb 2013 07:05:28 +0000
2.0.0-p247 :003 > email.update_attribute(datetime: datetime.convert_zone(datetime.zone, user.timezone) # => convert_zone is not an actual method, so what should I put in here?
=> Mon, 04 Feb 2013 09:05:28 +0200