У меня есть ужасное время (без каламбура) с сопоставлением DateTime в моем текущем проекте, в частности, сравнение двух экземпляров ActiveSupport:: TimeWithZone. Проблема в том, что оба экземпляра TimeWithZone имеют одинаковое значение, но все сравнения показывают, что они разные.
Приостановка во время выполнения для отладки (с использованием RubyMine), я могу видеть следующую информацию:
timestamp = {ActiveSupport::TimeWithZone} 2014-08-01 10:33:36 UTC
started_at = {ActiveSupport::TimeWithZone} 2014-08-01 10:33:36 UTC
timestamp.inspect = "Fri, 01 Aug 2014 10:33:36 UTC +00:00"
started_at.inspect = "Fri, 01 Aug 2014 10:33:36 UTC +00:00"
Однако сравнение показывает, что значения не равны:
timestamp <=> started_at = -1
Самый близкий ответ, который я нашел в поиске (Сравнение двух объектов ActiveSupport:: TimeWithZone не работает) указывает на ту же проблему здесь, и я пробовал решения, которые были применимы без любой успех (попробованный db: test: подготовьте, и я не запустил Spring).
Кроме того, даже если я пытаюсь преобразовать в явные типы, они все равно не эквивалентны при сравнении.
TO_TIME:
timestamp.to_time = {Time} 2014-08-01 03:33:36 -0700
started_at.to_time = {Time} 2014-08-01 03:33:36 -0700
timestamp.to_time <=> started_at.to_time = -1
to_datetime:
timestamp.to_datetime = {Time} 2014-08-01 03:33:36 -0700
started_at.to_datetime = {Time} 2014-08-01 03:33:36 -0700
timestamp.to_datetime <=> started_at.to_datetime = -1
Решение только ", которое я нашел до сих пор, заключается в том, чтобы преобразовать оба значения с помощью to_i
, а затем сравнить, но это крайне неудобно коду везде, где я хочу делать сравнения (и, кроме того, кажется, что это должно быть ненужным):
timestamp.to_i = 1406889216
started_at.to_i = 1406889216
timestamp.to_i <=> started_at.to_i = 0
Любые советы будут очень оценены!