我已经查看过很多像这样的问题,但似乎没有一个问题符合我的问题,即:
我有一个包含事件的Rails应用程序。事件是具有开始日期(日期字段),开始时间(时间)和结束时间(时间)的属性的模型。当我创建它们时,我没有将任何输入的日期转换为基于UTC的时间(所有时间都是本地的)。
我试图找出事件是否结束。我已经为我的模型添加了一些应该有用的方法,但因为我将苹果(非UTC)与橙色(UTC)时间进行比较。我碰到了一堵砖墙。
因为我正在混合日期和时间,所以我在我的事件模型中添加了以下方法:
def date_start_time
return DateTime.new(self.date.year, self.date.month, self.date.day, self.start_time.hour, self.start_time.min, self.start_time.sec)
end
def date_end_time
return DateTime.new(self.date.year, self.date.month, self.date.day, self.end_time.hour, self.end_time.min, self.end_time.sec)
end
def in_past
logger.debug 'comparing end time: ' + self.date_end_time.to_s + ' to the current time: ' + DateTime.now.to_s
self.date_end_time <= DateTime.now
end
我正在Rails控制台中加载一个应该在几分钟内结束的事件,但是我得到了一个真实的in_past:
1.9.3-p194 :020 > event.in_past
comparing end time: 2013-08-19T20:38:00+00:00 to the current time: 2013-08-19T20:37:22-05:00
=> true
我尝试将.zone添加到我的DateTime.now,但这似乎让它变得更糟。我觉得我在这里尝试了各种区域选项,我真的更喜欢忽略时区,因为所有活动都是当地的。
思考?建议?
答案 0 :(得分:0)
快速解决方案是将时区添加到rails config(application.rb),就像这样
config.time_zone = '<your local timezone>'
您可以通过
获取所有可用的时区#rake time:zones:all