Обработка часового пояса
Я просто хочу уточнить, хотя это было прокомментировано, чтобы будущие люди не пропустили это очень важное различие.
DateTime.strptime("1318996912",'%s') # => Wed, 19 Oct 2011 04:01:52 +0000
отображает возвращаемое значение в UTC и требует, чтобы секунды были строкой, и выводит объект времени UTC, тогда как
Time.at(1318996912) # => 2011-10-19 00:01:52 -0400
отображает возвращаемое значение в часовом поясе LOCAL, обычно требуется аргумент FixNum, но сам объект Time по-прежнему находится в UTC, даже если на дисплее это не так.
Так что, хотя я и передал одно и то же целое число в оба метода, я, похоже, получил два разных результата из-за того, как работает метод класса '#to_s
. Однако, как @Eero пришлось дважды напомнить мне о:
Time.at(1318996912) == DateTime.strptime("1318996912",'%s') # => true
Сравнение равенства между двумя возвращаемыми значениями все еще возвращает true. Опять же, это потому, что значения в основном одинаковы (хотя разные классы, метод #==
позаботится об этом за вас), но метод #to_s
печатает совершенно разные строки. Хотя, если мы посмотрим на строки, мы увидим, что они действительно одинаковы, просто напечатаны в разных часовых поясах.
Метод Аргумент Разъяснение
В документах также говорится: «Если задан числовой аргумент, результат получен по местному времени». это имеет смысл, но меня немного смутило, потому что в документах не приводятся примеры нецелых аргументов. Итак, для некоторых примеров нецелых аргументов:
Time.at("1318996912")
TypeError: can't convert String into an exact number
вы не можете использовать аргумент String, но вы можете использовать аргумент Time в Time.at
, и он вернет результат в часовом поясе аргумента:
Time.at(Time.new(2007,11,1,15,25,0, "+09:00"))
=> 2007-11-01 15:25:00 +0900
**** отредактировано, чтобы не быть полностью и совершенно неверным во всех отношениях ****