保留Rails中的时区
如果我有来自客户的"Wed, 22 Jun 2011 09:43:58 +0200"
forms的时间字符串,我希望保存时区。 这很重要,因为重要的不仅是绝对的UTC时间,还有时区。
Time.zone.parse(t)
会将时间转换为Time.zone
正在使用的区域, Time.zone
丢失源时区。
我是否必须从上面的字符串中手动提取时区,或者是否有惯用的方法来执行此操作?
DateTime字段只能存储’YYYY-MM-DD HH:MM:SS’( MySQL ),没有时区信息。
您应该将日期时间存储在UTC中,将时区存储在不同的字段中,最好是一个整数,指定与UTC的偏移量(以分钟为单位)。
您可以像这样提取偏移量:
ruby-1.9.2-p180:001:0>> require 'active_support/all' # included by Rails by default # => true ruby-1.9.2-p180:002:0>> dt = DateTime.parse "Wed, 22 Jun 2011 09:43:58 +0200" # => Wed, 22 Jun 2011 09:43:58 +0200 ruby-1.9.2-p180:003:0>> dt.utc_offset # => 7200 ruby-1.9.2-p180:004:0>> dt.utc # => Wed, 22 Jun 2011 07:43:58 +0000
编辑:
练习往返
ruby-1.9.2-p180 :039 > u.utc.new_offset(u.offset) => Wed, 22 Jun 2011 09:43:58 +0500 ruby-1.9.2-p180 :040 > u => Wed, 22 Jun 2011 09:43:58 +0500
我想你正在寻找以下解决方案:
在ApplicationController中:
before_filter :get_tz def get_tz @tz = current_user.time_zone end def use_tz Time.use_zone @tz do yield end end
并在控制器中添加在beginnig周围的filter
around_filter :use_tz
- Rails应用程序错误 – ActiveRecord :: PendingMigrationError正在等待迁移; 运行’rake db:migrate RAILS_ENV = development’来解决此问题
- Rails 3.2`link_to`(在电子邮件中)与`method :: put`仍然产生GET请求
- 使用Rails保存XML文件
- 在Heroku上的新Rails 5.2.1应用程序中的Javascript无法正常工作
- 设计/用户/ sign_in重定向到错误的控制器
- 将Object转换为hash,然后将其保存到用户列
- 在提交和重新加载页面后,我的表单复选框如何保持其状态?
- 范围:按两个日期之间的差异排序
- “rails s”和“bundle exec rails s”有什么区别?