Использование UTC с продолжением?

Я не хотел бы хранить время в моем местном часовом поясе, но Sequel усложняет мне задачу. Я могу установить их в UTC, прежде чем помещать их туда (что-то вроде боли), но затем, когда я беру их обратно, предполагается, что это локальные даты, а затем все они на 8 часов вперед. Это то, что еще не реализовано? И если да, то есть ли обходные пути? Спасибо!


person Phil Kulak    schedule 11.07.2009    source источник


Ответы (3)


Самый простой способ попытаться поместить их в формате UTC — переопределить literal_datetime и/или literal_time для класса набора данных, который вы используете, чтобы вернуть литеральную строку времени UTC.

Получение их в формате UTC зависит от используемого вами адаптера. Например, адаптер postgres вызывает Sequel.string_to_datetime, который просто вызывает синтаксический анализ класса Sequel.datetime_class (по умолчанию Time). Если столбец datetime включает информацию о часовом поясе, все должно работать нормально. Если он не включает информацию о часовом поясе, Time.parse будет считать, что ему задано местное время. В этом случае вы можете переопределить Sequel.string_to_datetime, чтобы убедиться, что он всегда возвращает время со смещением UTC (возможно, путем вызова Time.parse(s).gmtime).

person Jeremy Evans    schedule 04.08.2009

На данный момент это немного устарело, но я считаю, что лучшее решение здесь изменилось с момента публикации исходного ответа. Если вы установите

Sequel.default_timezone = :utc

сиквел будет рассматривать все времена как UTC и не будет демонстрировать поведение, описанное в вопросе.

Дополнительную информацию см. на странице http://sequel.jeremyevans.net/rdoc/classes/Sequel/Timezones.html

person Michael Wasser    schedule 24.09.2011

Просто у меня была очень похожая проблема.

Эта информация была взята из Sequel RDoc.

Sequel может использовать Time или DateTime для времени, возвращаемого из базы данных. По умолчанию используется время. Чтобы изменить его на DateTime, используйте:

Sequel.datetime_class = DateTime

Также убедитесь, что вы не храните информацию о часовом поясе в своей базе данных. Я использую Postgres, а тип столбца — отметка времени без часового пояса.

Это должно привести к отображению даты/времени в формате UTC. Это сработало для меня при передаче даты/времени 2009-07-13T03:22:53Z результат отображается как 2009-07-13T03:22:53+00:00

person Luke Antins    schedule 13.07.2009