日期时间作为 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)输出日期时间,而不是在用户的特定时区。
我需要更改哪些日期和时间才能在用户所需的时区正确显示?
感谢您的时间和帮助。
编辑:
根据本杰明的建议,我不得不稍微修改它以使其正常工作(遇到相同的错误) -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")