我要求通过类似POST localhost:3000/visit
的api保存datetime(visited_at)属性,但问题是我不知道如何处理时区。我已经看到有关铁路时区支持的解释here,但是当你通过铁轨形式创建它时。如果有办法通过我自己的api处理这个问题,我想知道。
答案 0 :(得分:2)
有3个相关问题:
您的问题主要是关于(1),但(2)和(3)也很重要。
对于(2),我会将所有内容规范化为UTC,因此夏令时等不会对您产生影响。在config / environment.rb中,我会设置ENV['TZ'] = 'utc'
只是为了安全起见。
对于(3),如果要在本地时区显示用户的时间,则必须将其存储在用户模型中,然后适当地格式化时间。
现在,对于(1),您应该能够解析传入的时间(例如,使用Time.parse),然后将其归一化为UTC。 Time.parse可以处理描述时区的各种方式。 (我会指定您的API来声明如果未指定时区,则假定为UTC。)
E.g。
>> ENV['TZ']
=> "utc"
>> Time.now.to_s
=> "Wed Jan 13 16:43:00 +0000 2010"
>> Time.parse( "Wed Jan 13 16:43:00 +0500 2010" )
=> Wed Jan 13 11:43:00 +0000 2010
>> Time.parse( "Wed Jan 13 16:43:00 -0500 2010" )
=> Wed Jan 13 21:43:00 +0000 2010
>> Time.parse( "Wed Jan 13 16:43:00 EST 2010" )
=> Wed Jan 13 21:43:00 +0000 2010
>> Time.parse( "Wed Jan 13 16:43:00 CST 2010" )
=> Wed Jan 13 22:43:00 +0000 2010
>> t1 = "Wed Jan 13 16:43:00 CST 2010"
=> "Wed Jan 13 16:43:00 CST 2010"
>> t2 = "Wed Jan 13 17:43:00 EST 2010"
=> "Wed Jan 13 17:43:00 EST 2010"
>> Time.parse(t1) == Time.parse(t2)
=> true