简体   繁体   中英

How convert a string into a ActiveSupport::TimeWithZone?

I need to update a field (called updated_at ). The field in MySQL is of type datetime , and the class is ActiveSupport::TimeWithZone . But the dates are strings like "10/17/2008" . I used "10/17/2008".to_date (And I intend .to_time and .to_datetime ), and even if in console the ActiveRecord class save successfully, the field in the database still is the current date.

OK.. let's take them one at the time.

First, it is not recommended to set a field name updated_at , since this is a "magic" field that is automatically populated by Rails.

If you want to disable this functionality, you may:

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

in your class, but this will also disable created_at fields.

The best option is to add a new field (eg my_updated_at ) as date in the database, and then Rails will automatically handle conversions, meaning that the next snippet will work:

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

Second, the answer on how to parse a string to ActiveSupport::TimeWithZone is:

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

but I don't think this will help you (of course, change UTC with your current date/time).

Simply

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

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


And just to confirm that it worked..

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

# => ActiveSupport::TimeWithZone

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM