2017-02-19 3 views
0

Ошибка при использовании двух переменных datetime в условном выражении.форматирование переменных datetime для условного оператора

Вот пример вывода переменной one. Назовём его ontime_datetime:

Пт, 10 февраля 2017 16:30:00 +0000

Ниже приведен пример вывода переменной два. Назовём его delivery_timestamp:

Пт, 10 февраля 2017 13:15:00 -0600

Мне нужно сравнить эти две переменные и выяснить, какое значение больше по дате и времени:

if delivery_timestamp <= ontime_datetime 
     f.update_attributes(on_time: true) 
     puts "#{f.tracking_number}  ONTIME" 
elsif delivery_timestamp > ontime_datetime 
     f.update_attributes(status_refund: true) 
     puts "#{f.tracking_number}  NOT ONTIME" 

else 
     f.update_attributes(other_result: true) 
     puts "#{f.tracking_number}  OTHER" 
end 

Когда я бегу мой сценарий второй условно считается выполненным, но значение delivery_timestamp находится перед ontime_datetime, поэтому первого условного должно быть выполнено. Я думаю, что это имеет какое-то отношение к значению часового пояса? (который мне не нужен, но не уверен, как его удалить)

Либо это, либо мне нужно форматировать переменную лучше для этого типа условно.

Добавлено позже DK для получения дополнительной информации ---- Вот как я получаю ontime_datetime:

json_response = JSON.parse(response) 
       transit_time = json_response['TrackPackagesResponse']['packageList'][0]['standardTransitTimeWindow']['displayStdTransitTimeEnd'] 
       transit = json_response['TrackPackagesResponse']['packageList'][0]['standardTransitDate']['displayStdTransitDate'] 
       transit_date = Date.parse Date.strptime(transit, '%m/%d/%Y').strftime("%Y-%m-%d") 
       transit_datetime = "#{transit_date} #{transit_time}" 
       ontime_datetime = DateTime.strptime(transit_datetime, "%Y-%m-%d %I:%M %p") 

... и вот как я получаю delivery_timestamp:

delivery_timestamp = info_track[:delivery_timestamp] 

Выходное значение - это тот же формат между ontime_datetime и delivery_timestamp, но условие nal оценка не работает должным образом. Любая помощь (через демонстрацию кода) была бы замечательной!

Пожалуйста, посоветуйте - DK

+1

Вы сравниваете значения как строки или объекты DateTime? (Последний определенно предпочтительнее) – user12341234

+0

Хороший вопрос. Я получаю значение «delivery_timestamp» из ответа xml: delivery_timestamp = info_track [: delivery_timestamp]. И ontime_datetime форматируется следующим образом: ontime_datetime = DateTime.strptime (transit_datetime, "% Y-% m-% d% I:% M% p"). Кажется, я использую переменную string и datetime, которая ... так что это, вероятно, проблема? – Derek

+0

Я бы определенно проверил их типы и сделал их как истинными объектами DateTime, если это возможно. Сравнение двух разных типов друг против друга звучит как плохое время. – user12341234

ответ

0

Похоже, часовой пояс имеет отношение к времени, но если вы уверены вы их не нужно: check out strftime

0

Условный правильно работает. Обе переменные должны быть в том же формате DateTime, который у меня не был.

Смежные вопросы