Ruby on rails 比较Rails中不同区域的日期时间/时间的问题
在我的应用程序中,用户设置任务的特定结束时间。加载任务时,它会使用该任务的信息创建相应的签入(在本例中,self是任务): 我已经将config.time_zone设置为“东部时间(美国和加拿大)”,但不是创建UTC任务,而是将其提交为EST,然后从中减去4小时Ruby on rails 比较Rails中不同区域的日期时间/时间的问题,ruby-on-rails,ruby,datetime,Ruby On Rails,Ruby,Datetime,在我的应用程序中,用户设置任务的特定结束时间。加载任务时,它会使用该任务的信息创建相应的签入(在本例中,self是任务): 我已经将config.time_zone设置为“东部时间(美国和加拿大)”,但不是创建UTC任务,而是将其提交为EST,然后从中减去4小时 [2] pry(main)> CheckIn.last.end_time CheckIn Load (0.7ms) SELECT "check_ins".* FROM "check_ins" ORDER BY "check_
[2] pry(main)> CheckIn.last.end_time
CheckIn Load (0.7ms) SELECT "check_ins".* FROM "check_ins" ORDER BY "check_ins"."id" DESC LIMIT 1
=> Sun, 20 Oct 2013 19:30:00 EDT -04:00
[3] pry(main)> Task.last.end_time
Task Load (0.7ms) SELECT "tasks".* FROM "tasks" ORDER BY "tasks"."id" DESC LIMIT 1
=> Sun, 20 Oct 2013 23:30:00 EDT -04:00
根据用于创建模型的任务,该模型实例的结束时间应为晚上11点。这是我第一次在Rails中与time一起工作,因此非常感谢您的帮助。多谢各位
更新:
将其切换回UTC并将该方法添加到ApplicationController,但这里真正的问题是我创建签入的方式。由于Task.end_time在创建时用作参考,并作为EST从数据库中调用,因此在创建签入时偏移量增加了一倍。真奇怪。我的解决方案是使用。创建时更改:
CheckIn.create(task_id: self.id, start_time: self.create_checkin_start_time(day).change(:hour => self.start_time.hour + 4), end_time: self.create_checkin_end_time(day).change(:hour => self.end_time.hour + 4))
这决不是一个好的/永久的解决方案。我现在有点时间紧张,这将适合我的需要 我建议将
config.time\u zone
设置为UTC
,这样您就不会看到数据库中发生这种奇怪的变化
如果您想强制应用程序的用户使用特定时区,那么最好的选择是在应用程序控制器
中使用前过滤器
:
before_filter :set_timezone
def set_timezone
Time.zone = "Eastern Time (US & Canada)"
end
这样,所有时间都将作为UTC时间保存到数据库中,但将在站点上显示为东部时间
这样做的原因很简单:从一个世界中心时间(UTC)转换比从某个任意点转换回UTC然后再转换到另一个任意点更容易
before_filter :set_timezone
def set_timezone
Time.zone = "Eastern Time (US & Canada)"
end