0

我已经查看了很多这样的问题,但似乎没有一个与我的问题相对应,即:

我有一个包含事件的 Rails 应用程序。事件是具有开始日期(日期字段)、开始时间(时间)和结束时间(时间)属性的模型。当我创建它们时,我没有将任何输入的日期转换为基于 UTC 的时间(所有时间都是本地时间)。

我想知道活动是否结束了。我在我的模型中添加了一些方法来解决这个问题,但是因为我正在比较 Apples(非 UTC)和 Oranges(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

in_past 方法

  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 中,但这看起来更糟。我觉得我在这里尝试了所有区域选项的组合,实际上我更愿意忽略时区,因为所有事件当前都是本地的。

想法?建议?

4

1 回答 1

0

对此的快速解决方案是像这样将时区添加到 rails config (application.rb)

config.time_zone = '<your local timezone>'

您可以通过以下方式获取所有可用时区

#rake time:zones:all
于 2013-08-20T01:56:58.977 回答