RoR:将日期时间UTC字符串解析为特定时区



日期时间以UTC形式存储在MySQL中。

在我的应用程序中,我设置了:config.time_zone='UTC'

在我的application_controller中,我设置了用户选择的时区:

around_filter :user_time_zone, :if => :current_user
def user_time_zone(&block)
  Time.use_zone(current_user.time_zone, &block)
end

我可以通过<%= Time.zone.now%>确认这一点,因为它返回了用户设置的时区

然后,我执行一个选择查询来获取日期时间字段,并将其作为数组的一部分呈现给用户。

在我看来,我有:

<%= Time.zone.parse(item[1]).strftime("%m/%d/%Y %I:%M %p") %>

它只是按原样(UTC)输出日期时间,而不是在用户的特定时区中。

为了使日期和时间在用户想要的时区中正确显示,我需要更改什么?

感谢您的时间和帮助。

编辑:

根据Benjamin的建议,我不得不稍微修改它以使其工作(得到了相同的错误)-Time.strptime(item[1], '%Y-%m-%d %H:%M:%S').in_time_zone(Time.zone),但仍有2个问题。

1-最初的日期时间是:2013-07-25 22:27:50,但显示的是:2013-07.25 16:27:50-1000我的用户时区是夏威夷,距离UTC为-10,但这只显示了6小时的差异?

2-如何以用户易于阅读的格式获取此信息(07/25/2013 12:27 PM)?再次感谢

已解决:感谢本杰明。我忘了提到我(一直)在使用1.8.7,所以我不得不解决1.8.7和1.9.3之间的一些小差异,但我使用了

<%= DateTime.strptime(item[1], '%Y-%m-%d %H:%M:%S').in_time_zone(Time.zone).to_formatted_s(:long)%>

更新:使用将其转换为我想要的格式(2013年6月20日01:00 AM)

DateTime.strptime(item[1], '%Y-%m-%d %H:%M ').in_time_zone(Time.zone).strftime("%m/%d/%Y %I:%M %p") 

试试这个

Time.strptime(item[1], '%Y-%m-%dT%H:%M:%S%z').in_time_zone(Time.zone) 

回答奖励问题

  1. 检查数据库服务器的时区,并仔细检查rails数据(默认配置/用户TZ)

  2. 使用to_formatted_shttp://api.rubyonrails.org/classes/Time.html#method-i-to_formated_s

相关内容

  • 没有找到相关文章

最新更新