将ActiveSupport :: TimeWithZone转换为DateTime

时间:2010-12-20 23:17:39

标签: ruby-on-rails ruby datetime

我试图在两个日期之间每N天步一次。我尝试了下面的代码但是没有用,因为startDate和endDate是ActiveSupport :: TimeWithZone对象而不是像我想的那样的DateTime对象。

startDate.step(endDate, step=7) { |d| puts d.to_s}
  min.step(max, step=stepInt){ |d|
  puts d.to_s  
}

如何将TimeWithZone对象转换为DateTime?

2 个答案:

答案 0 :(得分:31)

我认为在我最近搜索这个答案时更新这个答案可能会有用。实现此转换的最简单方法是使用.to_datetime()函数。

e.g。

5.hours.from_now.class              # => ActiveSupport::TimeWithZone
5.hours.from_now.to_datetime.class  # => DateTime

参考:http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html#method-i-to_datetime

答案 1 :(得分:15)

DateTime是您通常希望避免使用的旧类。 TimeDate是您要使用的两个。 ActiveSupport::TimeWithZone的行为类似Time

对于踩过日期,您可能想要处理Date个对象。您可以使用TimeActiveSupport::TimeWithZone(或Date)转换为Time#to_date

from.to_date.step(to.to_date, 7) { |d| puts d.to_s }