bra*_*ing 3 timezone datetime ruby-on-rails
如果我有一个"Wed, 22 Jun 2011 09:43:58 +0200"来自客户端的表单的时间字符串,我希望保存它的时区.这很重要,因为重要的不仅是绝对的UTC时间,还有时区.
Time.zone.parse(t)将时间转换为当时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
Run Code Online (Sandbox Code Playgroud)
编辑:
练习往返
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3222 次 |
| 最近记录: |