如何将字符串转换为ActiveSupport :: TimeWithZone?

时间:2010-04-09 15:30:44

标签: ruby-on-rails activerecord date

我需要更新一个字段(称为updated_at)。 MySQL中的字段是datetime类型,类是ActiveSupport::TimeWithZone。但日期是字符串,如"10/17/2008"。我使用"10/17/2008".to_date(我打算.to_time.to_datetime),即使在控制台中ActiveRecord类成功保存,数据库中的字段仍然是当前日期。

2 个答案:

答案 0 :(得分:5)

好的..让我们一起拿一个。

首先,建议不要设置字段名updated_at,因为这是一个由Rails自动填充的“魔术”字段。

如果要禁用此功能,您可以:

class Foo < ActiveRecord::Base
  self.record_timestamps = false
end

在您的课程中,但这也会禁用created_at个字段。

最好的选择是在数据库中添加一个新字段(例如my_updated_at)作为日期,然后Rails将自动处理转换,这意味着下一个代码段将起作用:

Foo.new({:my_updated_at => "10/17/2008"})

其次,关于如何将字符串解析为ActiveSupport::TimeWithZone的答案是:

ActiveSupport::TimeZone['UTC'].parse("10/17/2008")

但我认为这不会对您有所帮助(当然,请使用您当前的日期/时间更改UTC)。

答案 1 :(得分:1)

简单

date_as_string = "2008-10-17"
ActiveSupport::TimeZone['UTC'].parse(date_as_string)

# => Fri, 17 Oct 2008 00:00:00 UTC +00:00


和只是为了确认它的工作..

ActiveSupport::TimeZone['UTC'].parse(date_as_string).class

# => ActiveSupport::TimeWithZone