Используете UTC с сиквелом? - PullRequest
6 голосов
/ 12 июля 2009

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

Ответы [ 3 ]

21 голосов
/ 24 сентября 2011

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

Sequel.default_timezone = :utc

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

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

5 голосов
/ 13 июля 2009

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

Эта информация взята из Sequel RDoc

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

Sequel.datetime_class = DateTime

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

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

3 голосов
/ 05 августа 2009

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

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

...