Я не хотел бы хранить время в моем местном часовом поясе, но Sequel усложняет мне задачу. Я могу установить их в UTC, прежде чем помещать их туда (что-то вроде боли), но затем, когда я беру их обратно, предполагается, что это локальные даты, а затем все они на 8 часов вперед. Это то, что еще не реализовано? И если да, то есть ли обходные пути? Спасибо!
Использование UTC с продолжением?
Ответы (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).
На данный момент это немного устарело, но я считаю, что лучшее решение здесь изменилось с момента публикации исходного ответа. Если вы установите
Sequel.default_timezone = :utc
сиквел будет рассматривать все времена как UTC и не будет демонстрировать поведение, описанное в вопросе.
Дополнительную информацию см. на странице http://sequel.jeremyevans.net/rdoc/classes/Sequel/Timezones.html
Просто у меня была очень похожая проблема.
Эта информация была взята из Sequel RDoc.
Sequel может использовать Time или DateTime для времени, возвращаемого из базы данных. По умолчанию используется время. Чтобы изменить его на DateTime, используйте:
Sequel.datetime_class = DateTime
Также убедитесь, что вы не храните информацию о часовом поясе в своей базе данных. Я использую Postgres, а тип столбца — отметка времени без часового пояса.
Это должно привести к отображению даты/времени в формате UTC. Это сработало для меня при передаче даты/времени 2009-07-13T03:22:53Z результат отображается как 2009-07-13T03:22:53+00:00