我正在处理Rails和Postgres中的日期和时间并遇到这个问题:
数据库采用UTC格式.
用户在Rails应用程序中设置选择的时区,但仅在获取用户本地时间来比较时间时使用.
用户存储时间,例如2012年3月17日晚上7点.我不希望存储时区转换或时区.我只想保存日期和时间.这样,如果用户改变他们的时区,它仍将显示2012年3月17日,晚上7点.
我只使用用户指定的时区来获取用户本地时区当前时间之前或之后的记录.
我目前正在使用"没有时区的时间戳",但是当我检索记录时,rails(?)会将它们转换为应用程序中的时区,这是我不想要的.
Appointment.first.time
=> Fri, 02 Mar 2012 19:00:00 UTC +00:00
Run Code Online (Sandbox Code Playgroud)
因为数据库中的记录似乎是以UTC形式出现的,我的黑客是用当前时间,用'Date.strptime(str,"%m /%d /%Y")删除时区,然后做我的查询:
.where("time >= ?", date_start)
Run Code Online (Sandbox Code Playgroud)
似乎必须有一种更简单的方法来忽略周围的时区.有任何想法吗?
更新:好的,我没有制定好的Q来回答.我仍然在-07:00 UTC和我在+ 02:00 UTC时遇到heroku.
问:如何使用正确的Time.zone编写日志?
9个小时的差异,heroku(美国西部) - 挪威,让人分心.我在我的production.log(使用heroku logs)中得到了这个:
处理ProductionController #create to xml(2010-04-28 23:00:12为81.26.51.35)[POST]
我如何写它2010-04-29 08:00:12 +02:00 GMT?
请注意,我正在heroku运行,无法自己设置服务器时间,就像您在亚马逊EC2服务器上所做的那样.下面是我之前的问题,我会留下它,因为它包含一些有关时间和区域的有趣信息.
Time.now当我在我的设置另一个时区时,为什么会产生服务器本地时间environment.rb
config.time_zone = 'Copenhagen'
Run Code Online (Sandbox Code Playgroud)
我把它放在一个视野中
<p> Time.zone <%= Time.zone %> </p>
<p> Time.now <%= Time.now %> </p>
<p> Time.now.utc <%= Time.now.utc %> </p>
<p> Time.zone.now <%= Time.zone.now %> </p>
<p> Time.zone.today <%= Time.zone.today %> </p>
Run Code Online (Sandbox Code Playgroud)
在heroku上的应用程序中呈现此结果
Time.zone(格林尼治标准时间+01:00)哥本哈根
Time.now Mon Apr 26 08:28:21 -0700 2010
Time.now.utc Mon Apr 26 15:28:21 …