そのため、Time.zone を設定すると、ビューの日付から一貫性のない結果が得られます。誰かが何が起こっているのか教えてくれることを願っています。ubuntuサーバー12.04で実行されているRuby on Railsアプリを持っています
私のアプリケーション コントローラーには、current_user の会社の time_zone レコードから Time.zone を設定する before_filter があります。
before_filter :set_user_time_zone
private
def set_user_time_zone
Time.zone = current_user.company.time_zone if user_signed_in?
end
私がテストしているユーザーは「中部時間(米国およびカナダ)」にいます
生のデータベース レコードは 2012-08-13 20:10:54 です。
私の見解では、次のコードを使用して日付をフォーマットしています。
servicedata.service_last_run_time.strftime('%b %e, %Y %l:%M%P')
「2012 年 8 月 13 日午後 8 時 10 分」を返すことを期待しますが、これは「中部時間 (米国およびカナダ)」の上記のレコードになりますが、「2012 年 8 月 13 日午前 9 時 10 分」となります。
Rails コンソールで同じコードをテストしたところ、問題なく動作しました。なぜ機能しないのかわかりません。
before_filter のアイデアを見つける前は、すべてのビューで単に「in_time_zone」をチェーンしていましたが、同じ結果が得られました。例
servicedata.service_last_run_time.in_time_zone(current_user.company.time_zone).strftime('%b %e, %Y %l:%M%P')
ここでも、Time.zone または in_time_zone を日付オブジェクトに手動でチェーンすることは両方とも、Rails コンソールでは正常に機能しましたが、ビューでは恐ろしい間違った時刻が返されます。
サーバーが次の UTC から変更されていないことを確認する時間であることをテストしました。
Rails Console : 2012-08-14 02:06:29 +0000
Ubuntu Shell: Tue Aug 14 02:06:38 UTC 2012
ここで何が欠けているのかわかりません。