Почему этот запрос направляющих ведет себя по-другому в зависимости от часового пояса?

Я часто нахожу, что использование разработки через тестирование помогает вести меня, когда сталкивающийся с этими вопросами.

  • , Когда простой подход достаточен? всегда достаточно использовать самый простой подход, чтобы заставить следующий тест передавать. Но знание, когда/как осуществить рефакторинг, является реальным видом искусства.
  • , Каков минимальный размер части программного обеспечения, которое выравнивает по ширине использование шаблонов GoF? эмпирическое правило А, которое я когда-то считал, - то, что, когда Вы кодируете что-то однажды, прекрасный, когда Вы копируете тот код где-нибудь во второй раз, записать и идут дальше. При нахождении потребности в том же коде третьим разом, когда пора осуществить рефакторинг, чтобы удалить дублирование и упростить, и часто который включает перемещение в шаблон разработки.
  • , Когда осуществить рефакторинг от бесхитростного до GoF? мне нравится, какой сказанный @anopres - время, когда Вы чувствуете боль не имения в распоряжении шаблона разработки. Боль (или код "запах") может проявиться несколькими способами. Дублирование кода является самым очевидным. При рефакторинге книг как Fowler Рефакторинг или Kerievsky Рефакторинг к Шаблонам список много таких болей указывают/кодируют на зловоние.
  • этот [рефакторинг] может быть сделан разумным способом? прием к рефакторингу должен иметь комплект модульных тестов на месте, которые Вы уверены в, и затем осуществлять рефакторинг, не заставляя ни одного из тех тестов перестать работать. Рефакторинг, по определению, не изменяет функциональность Вашего кода. Поэтому, если Ваши тесты продолжают передавать, у Вас может быть довольно хорошее чувство, что Вы ничего не повредили. Хотя это может быть трудно, я на самом деле наслаждаюсь этой частью TDD, это почти похоже на игру для внесения изменений, не повреждая тестов.

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

8
задан Lance Roberts 21 January 2010 в 22:02
поделиться

1 ответ

Класс Time напрямую не знает вашего настроенного часового пояса. В Rails 2.1 добавлена ​​поддержка часовых поясов, но Время по-прежнему будет действовать в соответствии с вашим местным часовым поясом. Вот почему Time.now возвращает время BST.

Вы, вероятно, захотите взаимодействовать с Time.zone . Вы можете вызывать методы для этого, как и сам класс Time, но он будет возвращать его в указанном часовом поясе.

Time.zone.now # => Tue, 11 Aug 2009 21:31:45 UTC +00:00
Time.zone.parse("2:30 PM Aug 23, 2009") # => Sun, 23 Aug 2009 14:30:00 UTC +00:00

Еще одна вещь, с которой вам нужно быть осторожной, - это если вы когда-нибудь будете делать запросы к базе данных, где вы сравниваете время, но обязательно используйте время UTC (даже если у вас указан другой часовой пояс), потому что Rails всегда хранит UTC в базе данных.

Item.all(:conditions => ["published_at <= ?", Time.now.utc])

Кроме того, вместо Time.now-1.hour сделайте ] 1.hour.ago . Его легче читать, и Rails будет автоматически использовать настроенный часовой пояс.

13
ответ дан 5 December 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: