Rails 3.1时区,完全被难住了



我有一个用户模型和一个朋友模型。。我正在努力追踪用户最后一次联系朋友是什么时候。我有一个后台程序,它收集这些信息并保存为:

  friend.last_contact = Time.parse(status.created_at) #this is where I go wrong
  friend.save

我从推特上得到了这些信息,推特以UTC格式报道,格式如下:

"Thu Jan 05 23:29:00 +0000 2012"

当我进入rails控制台并执行这些命令时,日期将正确地保存为UTC和UTC时间。然而,当我通过守护进程收集这些信息时,它会使用UTC但使用本地时间将其保存在数据库中。。这让它休息了4个小时。我正在用rails runner运行我的守护程序,所以我相信主动支持应该没问题。我一辈子都搞不清楚出了什么问题。。

从我的服务器轨道控制台一些输出:

1.9.1 :001 > Time.now
=> 2012-01-10 00:40:37 +0400 
1.9.1 :002 > Time.zone.now
 => Mon, 09 Jan 2012 20:40:56 UTC +00:00 

这是20分钟前检索消息时保存的时间戳:

1.9.1 :009 > b.last_contact
 => Tue, 10 Jan 2012 00:27:20 UTC +00:00 

你会注意到这是服务器的"Time.now"。。但保存为UTC。。。让我困惑的是,如果我走进轨道控制台,输入:

> friend.last_contact = Time.now ; friend.save

> friend.last_contact = Time.zone.now ; friend.save

我出来的时间是正确的。。。。。。感谢任何帮助。

我也在Twitter上遇到了同样的问题(尽管这并不重要)。

三个想法:

  1. 您运行守护程序的服务器是UTC时间吗?Rails 3中时区的工作方式是在保存时(而不是之前)将时间转换为系统时区。所以它看起来还可以,直到你坚持这个值。

  2. 是否可能您的测试/生产数据库不在UTC,但您的本地测试数据库在UTC?如果你在托管的数据中心运行,有时他们运行的数据库不是在UTC,而是在托管的任何时区。

  3. 守护程序是否可能在具有不同TZ环境变量(或不同区域设置)的用户帐户下运行?http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html

相关内容

  • 没有找到相关文章

最新更新