Почему этот синтаксический анализ даты iso8601 со смещением +2?

У меня есть следующий JSON:

{"dtime" : "2020-08-26T15:30:00+03:00"}

Анализируя его, получаем следующую дату:

=> 2020-08-26 14:30:00 +0200

Почему у него смещение +2, а не +3?

РЕДАКТИРОВАТЬ: я использую Rails 3.2.13 с ActiveSupport 3.2.13. Я пытаюсь разобрать строку, используя:

Time.parse(string)

Однако я заметил, что если разобрать его с помощью:

DateTime.parse(string)

Я получаю правильное смещение.


person Geo    schedule 26.08.2013    source источник
comment
Какой у вас часовой пояс?   -  person Paul Tomblin    schedule 26.08.2013
comment
Европа / Бухарест, +03: 00   -  person Geo    schedule 26.08.2013
comment
А сервер или браузер или что-то еще, что вы используете для синтаксического анализа? Похоже, формат вывода установлен в другой часовой пояс.   -  person Paul Tomblin    schedule 26.08.2013
comment
Покажите, какой код вы его анализируете, и укажите, на каком языке или платформе. Спасибо.   -  person Matt Johnson-Pint    schedule 26.08.2013
comment
Мэтт, я обновил вопрос.   -  person Geo    schedule 26.08.2013
comment
Тогда просто используйте DateTime. См. stackoverflow.com/a/13199003/634824   -  person Matt Johnson-Pint    schedule 26.08.2013
comment
Я. Я не понимаю различного поведения методов синтаксического анализа, но, думаю, я буду придерживаться того, что работает. Я также открыл проблему на github github.com/rails/rails/issues/12027   -  person Geo    schedule 28.08.2013


Ответы (1)


Мне не нужно отвечать на этот вопрос, потому что я не использую Ruby. Тем не менее, просто глядя на стандартную библиотеку, кажется, что причина в _ 1_ включает вызов _ 2_, который преобразует результат синтаксического анализа в ваш часовой пояс.

Я подозреваю, что вы действительно выполняете этот код в GMT +02. Вы можете проверить с Time.new. Бегу в GMT -07.

>> Time.new
=> 2014-05-16 18:51:00 -0700

Вы можете преобразовать результат в любой часовой пояс, передав его в localtime.

>> require 'Time'
=> true
>> t = Time.parse("2020-08-26T15:30:00+03:00")
=> 2020-08-26 05:30:00 -0700
>> t.localtime("+03:00")
=> 2020-08-26 15:30:00 +0300
person duozmo    schedule 17.05.2014