Неправильная разница во времени сообщения

#python #time

#python #время

Вопрос:

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

У меня есть расстояние в км, скорость в км / ч и время прибытия (arr) в виде списка [месяц, день, час, минута] Я использовал y = time.time()-1577793600, чтобы получить текущее время в секундах в этом году. (число, которое я вычитаю, — это количество секунд, прошедших со времени эпохи Unix. (Я знаю, что это ужасный способ сделать это, но я подумал, что это имеет смысл). Кроме того, time_to_destination — это время, необходимое для того, чтобы добраться до места назначения за считанные секунды.

 import time

distance = 1000

speed = 3

arrival = [10, 13, 11, 30]

y = time.time()-1577793600
time_to_destination = (distance*1000) / (speed / 3.6)

arr = ((arrival[0]-1)*(30*24*3600)  (arrival[1]-1)*(24*3600)   (arrival[2])*(3600) (arrival[3]))

ti = arr - time_to_destination
            
if arr < y:
    return 'Date is in the past'
            
elif y > ti:
     return 'You are too late'
  

Однако это должно вернуть «Вы опоздали», поскольку время прибытия не прошло, но я не могу сделать это с той скоростью, которую я указал. Однако вывод «Дата в прошлом». Почему это так?

Ответ №1:

Что касается ваших переменных: 1577793600 на самом деле вторник, 31 декабря 2019 года, 12:00:00 вечера. Разве это не должно быть 1577836800 ?

Также не происходит преобразования для параметра минут. Вам нужно умножить минуты на 60.

 arr = ((arrival[0]-1)*(30*24*3600)  (arrival[1]-1)*(24*3600)   (arrival[2])*(3600) (arrival[3]*(60)))
  

Использование 30 в качестве количества дней в месяц также является приближением, которое может дать вам ложные результаты.

Я бы действительно рекомендовал заглянуть в модуль datetime

Комментарии:

1. Спасибо за ваш ответ! Я изучу это. Я знаю, что 30 дней в месяц неверно, однако это то, что они использовали в упражнении. (Это для начинающих)

Ответ №2:

Выходные данные ваших переменных выглядят следующим образом:

  ti : 23204430.0
 y  : 24713466.130041838
 arr: 24404430
  

Таким образом, исходя из этого, условие if-else будет проверять первое условие, if arr < y
которое должно быть false, чтобы перейти к следующему условию. Поскольку оно становится истинным в самом первом условии 24713466.130041838 > 24404430 , оно не переходит ко второму условию.
Либо вам нужно выбрать правильное преобразование даты для ввода условия if-else, либо выбрать соответствующую переменную