Обнаружил не очень правильное поведение Ruby при преобразовании времени между поясным и универсальным — следующий код:
local = Time.now puts "local\t= #{local}" utc = local.utc puts "utc\t= #{utc}" puts "local\t= #{local}"
выводит:
local = 2012-08-31 05:53:48 +0600 utc = 2012-08-30 23:53:48 UTC local = 2012-08-30 23:53:48 UTC
Т.е. метод utc
не только выдает соответствующее универсальное время, но и приводит к нему задействованный объект. Причем, восклицательного знака в имени метода нет... Проблема, естественно, обходится методом dup
.
И еще одна неприятная тонкость:
require 'time' before = Time.now string = before.xmlschema after = Time.xmlschema(string) other = Time.parse(string) puts "before\t= #{before}" puts "string\t= #{string.inspect}" puts "after\t= #{after}" puts "other\t= #{other}"
Выдает:
before = 2012-08-31 05:53:48 +0600 string = "2012-08-31T05:53:48+06:00" after = 2012-08-30 23:53:48 UTC other = 2012-08-31 05:53:48 +0600
Иначе говоря, метод класса Time.xmlschema()
всегда приводит результат к UTC. Это особенно интересно тем, что метод Time.parse()
тот же самый формат строки разбирает абсолютно корректно — выставляя правильную зону.
Комментариев нет:
Отправить комментарий