Read more

Time#utc, Time#gmt and Time#localtime are destructive methods

Henning Koch
August 25, 2011Software engineer at makandra GmbH

Calling Time#utc, Time#gmt or Time#localtime will not create a converted copy. Instead these methods modify the receiving Time object:

 >> time = Time.now
 => Thu Aug 25 09:52:28 +0200 2011
 >> time.utc
 => Thu Aug 25 07:52:28 UTC 2011
 >> time
 => Thu Aug 25 07:52:28 UTC 2011
Illustration online protection

Rails Long Term Support

Rails LTS provides security patches for old versions of Ruby on Rails (2.3, 3.2, 4.2 and 5.2)

  • Prevents you from data breaches and liability risks
  • Upgrade at your own pace
  • Works with modern Rubies
Read more Show archive.org snapshot

This can have unexpected side effects when other code is holding pointers to the Time object you are modifying. To be safe, call these methods on a clone of the Time object. You can clone a Ruby object by using #dup Show archive.org snapshot :

 >> time = Time.now
 => Thu Aug 25 09:54:40 +0200 2011
 >> time.dup.utc
 => Thu Aug 25 07:54:40 UTC 2011
 >> time
 => Thu Aug 25 09:54:40 +0200 2011
Posted by Henning Koch to makandra dev (2011-08-25 09:55)