Ruby 2.2 Time#parse Zeitzonen Problem

09.01.2015 by Stefan Wintermeyer

Parker Moore (@parkr) hat in seinem Blog-Post Ruby 2.2.0 Time#parse TZ-related regression einen für alle Rails- und Ruby-Entwickler wichtigen Punkt (Bug oder Feature?) zur Ruby Version 2.2 veröffentlicht. Bis einschliesslich Ruby 2.1 wurde von Time.parse() der zur parsende Uhrzeit für die System-Zeitzone geparst. Ab Ruby 2.2 muss dafür die Methode localtime benutzt werden.

Das von Parker erstellte Beispiel zeigt das Problem:

Ruby 2.1

>> require 'time'
=> true
>> ENV['TZ'] = 'Australia/Melbourne'
=> "Australia/Melbourne"
>> Time.parse("2014-12-29 20:16:32 -0400")
=> 2014-12-30 11:16:32 +1100

Ruby 2.2

>> require 'time'
=> true
>> ENV['TZ'] = 'Australia/Melbourne'
=> "Australia/Melbourne"
>> Time.parse("2014-12-29 20:16:32 -0400")
=> 2014-12-29 20:16:32 -0400 # <== !!! Timezone remains unchanged.
>> Time.parse("2014-12-29 20:16:32 -0400").localtime
=> 2014-12-30 11:16:32 +1100

Lösung

Ein gem update sollte die Probleme allen gut gewarteten Gems lösen. Für den eigenen Code sollte man einmal nach Time.parse suchen und dann die Methode localtime hinzufügen.

Rails Ruby