时区到当前时间

时间:2011-09-21 06:34:22

标签: ruby-on-rails ruby timezone

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

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

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

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

请帮忙

4 个答案:

答案 0 :(得分:1)

要设置TimeZone,您需要使用

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

答案 1 :(得分:1)

您可以使用此

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 

答案 2 :(得分:0)

在用户控制器中尝试使用这样的smth:

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

更改格式:

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

答案 3 :(得分:0)

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

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

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