0

私はいくつかの StackOverflow の質問を見てきましたが、どれも問題を解決していないようです。

たとえば、私の時間は次のとおりです。

2012-04-19 08:42:00 +0200

フォームから入力する内容です。しかし、すべてはそれがどのタイムゾーンにあるかに関連して表示されます。そのため、コンピューターは UTC で動作するため、保存された後の時間は次のようになります。

Wed, 18 Apr 2012 23:42:00 PDT -07:00

ゾーンを変更するだけで、同じ時間を維持するにはどうすればよいですか?

4

2 に答える 2

2

Time.use_zoneメソッドが役立つと思います。私が作業しているアプリでは、現在のユーザーのタイムゾーンに従って時間を解釈する必要がありました。Userクラスにはtime_zone有効な文字列である属性が与えられ、次のようActiveSupport::TimeZoneに作成しました。around_filter

class ApplicationController < ActionController::Base

  around_filter :activate_user_time_zone

  def activate_user_time_zone
    return yield unless current_user # nothing to do if no user logged in
    return yield unless current_user.time_zone && ActiveSupport::TimeZone[current_user.time_zone] # nothing to do if no user zone or zone is incorrect
    Time.use_zone(ActiveSupport::TimeZone[current_user.time_zone]) do
      yield
    end
 end

end

基本的に、これにより、コントローラーアクションのコードが、現在のユーザーのタイムゾーンにあるかのように実行されます。

于 2012-04-19T14:35:46.693 に答える
1

私は同じ要件を持っています。こちらこちらのリンクもご確認ください

あるいは

"2012-04-19 08:42:00 +0200".to_time.strftime("%c").to_datetime
于 2012-04-19T14:34:16.903 に答える