【问题标题】:Timezone to current time时区到当前时间
【发布时间】:2011-09-21 06:34:22
【问题描述】:

用户模型有 time_zone,其中存储说“太平洋时间(美国和加拿大)”。

场景: 1. Current_user 居住在日本时区 2. Current_user 正在查看住在“太平洋时间(美国和加拿大)”的 John 的个人资料 3. 在 John 的个人资料中,我需要在“太平洋时间(美国和加拿大)”显示当地时间为上午 10:01

我做了什么? ActiveSupport::TimeZone.new(@user.time_zone).now 返回类似 2011-09-21 10:01:56 UTC

问题: 1. 如何将其转换为上午 10:01? 2. 为什么是UTC?

请帮忙

【问题讨论】:

    标签: ruby-on-rails ruby timezone


    【解决方案1】:

    要设置时区,你需要使用

    Time.zone= @user.time_zone
    

    您可能希望在 application.rb 中的 :before_filter 中设置它

    OTOH,您可以将use_zone 方法与块一起使用

    Time.use_zone(@user.time_zone) do
      #.... This code will run as if you were in @user.time_zone
    end
    

    【讨论】:

      【解决方案2】:

      你可以用这个

      Time.zone = 'Pacific Time (US & Canada)'
      

      获取当地时间

      Time.zone.now      #=> Wed, 21 Sep 2011 02:25:08 PDT -07:00
      

      到上午 10:00/下午

      Time.zone.now.strftime("%I:%M %p")   #=> 02:25 AM 
      

      【讨论】:

        【解决方案3】:

        在你的用户控制器中尝试这样的事情:

        def show
          @user = find(params[:id])
          Time.zone = @user.time_zone
        end
        

        改变格式:

         Time.now.strftime("at %I:%M%p") 
        

        【讨论】:

          【解决方案4】:

          处理时间的理想方法是将数据以UTC格式保存在后端,这将使转换过程变得简单。

          正如上面提到的 Chandra Patni,您可以使用这些方法进行转换。

          要以格式化字符串显示时间对象,您可以使用 rails strftime 方法,http://apidock.com/rails/ActiveSupport/TimeWithZone/strftime

          【讨论】:

            猜你喜欢
            • 2011-03-15
            • 2011-05-08
            • 2019-12-15
            • 2019-02-22
            • 1970-01-01
            • 2012-04-07
            • 2017-04-30
            • 2020-01-18
            • 2011-09-14
            相关资源
            最近更新 更多