日期时间以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%>
确认这是有效的,因为它返回用户的设置时区
然后我执行select查询以获取datetime字段,并将其作为数组的一部分呈现给用户。
在我看来,我有:
<%= Time.zone.parse(item[1]).strftime("%m/%d/%Y %I:%M %p") %>
只按原样输出日期时间(UTC),而不是用户的特定时区。
为了让日期和时间在用户所需的时区中正确显示,我需要更改哪些内容?
感谢您的时间和帮助。
编辑:
Per 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 - 如何以用户易于阅读的格式(2013年7月25日下午12:27)获得此格式?再次感谢
解决: 感谢本杰明。我忘了提到我(卡住)使用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)%>
更新:使用以下内容获取我想要的格式(06/20/2013 01:00 AM):
DateTime.strptime(item[1], '%Y-%m-%d %H:%M ').in_time_zone(Time.zone).strftime("%m/%d/%Y %I:%M %p")
答案 0 :(得分:1)
试试这个
Time.strptime(item[1], '%Y-%m-%dT%H:%M:%S%z').in_time_zone(Time.zone)
回答奖金问题
检查数据库服务器的时区并仔细检查您的rails数据(默认配置/用户TZ)
使用to_formatted_s
http://api.rubyonrails.org/classes/Time.html#method-i-to_formatted_s