Правильное время UTC - 1805. Группа времени показывает 0805 в зоне -10, поэтому, чтобы получить UTC, добавьте 10 к данному времени. Таким образом, 1805. Поскольку 1805 меньше 2400, это тот же день.
Если ваш код дает 1605, то почти наверняка у вас неверно установлен часовой пояс на зону -8, которая является тихоокеанским стандартным временем.
Ага, похоже, ваш формат ввода испорчен. Обратите внимание:
irb(main):003:0> Time.parse("2008-02-20T8:05:00-010:00")
=> Wed Feb 20 08:05:00 -0700 2008
Я оказался в зоне -7, так что это подходит для моей страны. Но
irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):005:0> t
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):006:0> t.getutc
=> Wed Feb 20 15:05:00 UTC 2008
Я получаю неожиданный результат. Теперь соблюдайте:
irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")
=> Wed Feb 20 11:05:00 -0700 2008
irb(main):008:0> t.getutc
=> Wed Feb 20 18:05:00 UTC 2008
Ожидается ожидаемый результат. Увидеть разницу? Первый пример против второго:
irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")
Я вынул лишние 0 (которые I , конечно, тоже не заметил) и, чёрт, это работает.