Я учу Python. Недавно я столкнулся с тем, что при использовании «datetime.today (). Minute» я получаю o / p, прибавляя 30. Когда я комментирую часть -30 в это время, на выходе получается +30 от значения последней минуты, если я оставлю часть -30, то это даст правильное согласие. Это почему?

Код .

from datetime import datetime
odds = [1, 3, 5, 7, 9, 11 ,13, 15, 17, 19, 21, 23, 25, 27, 29 ,31, 33, 35, 37, 39 ,41, 43, 45, 47 ,49 ,51 ,53 ,55 ,57, 59]
odd_min = datetime.today().minute #- 30
print(odd_min)
#print("\n")
if odd_min in odds:
  print("Odd min")
else:
  print("Not odd min")

O / P:

48

Not odd min

Ожидаемая O / P:

18

Not odd min

Когда я вычитаю 30, это дает правильный результат. Но я хочу знать, почему это не дает правильного результата.

-4
Prannay Bothra 1 Июл 2019 в 07:57

4 ответа

Лучший ответ

Ваш профиль говорит, что вы из Индии, а часовой пояс в Индии имеет смещение UTC + 5:30, поэтому похоже, что дата и время не возвращают ваш местный часовой пояс.

Вы можете установить смещение так:

from datetime import datetime
from datetime import timedelta

datetime_now = datetime.utcnow() + timedelta(hours=5, minutes=30)
odd_min = datetime_now.minute

В противном случае вы можете просто использовать собственное решение и вычесть (или прибавить) 30 от времени. Время не будет вашим точным местным временем, но, поскольку ваш вариант использования касается только минут, это не имеет значения.

0
Serge Hauri 1 Июл 2019 в 05:58

В вашем коде нет ничего плохого. Попробуйте в цикле w, чтобы вы могли видеть это в режиме реального времени. Ваш комментарий #- 30 не имеет никакого эффекта, так как это комментарий.

from datetime import datetime as dt
while True: 
    now = dt.today().minute 
    print(now) 
    if now %2 == 0: 
        print(f'{now} is even')
    else:
        print(f'{now} is odd')

Я должен объяснить, что %2 == 0 является просто ярлыком для получения четных или нечетных значений. Мне трудно редактировать это по какой-то причине. сожалею об этом

0
tldr 1 Июл 2019 в 05:27

Это из-за часового пояса. Возможно, вы выполняете свой код в системе, которая в IST похожа на часовой пояс, который имеет +5: 30 дельта времени.

Использование odd_min = datetime.utcnow().minute вместо odd_min = datetime.today().minute

0
Rahul Raut 1 Июл 2019 в 09:20

code

Ваш код правильный, он работает для меня.

0
Rahul Verma 1 Июл 2019 в 05:13