Определите, находится ли дата и время до или после полудня - PullRequest
0 голосов
/ 30 мая 2020

Я работаю над небольшим тестовым кодом, чтобы определить, находится ли сгенерированное datetime до или после полудня, как в приведенном ниже коде.

import random
from datetime import datetime, timedelta
from pytz import timezone

current_date = datetime.now(timezone('America/Sao_Paulo'))
new_date = current_date - timedelta(days=2)
print (new_date.strftime("%Y-%m-%d %H:%M:%S"))

while new_date <= current_date:
  new_date = new_date + timedelta(minutes=10)
  print (new_date.strftime("%Y-%m-%d %H:%M:%S"))
  if new_date < datetime.time(12):
    print("test")

Проблема в том, что я не могу проверить, является ли new_date под полдень. Вероятно, я делаю что-то не так в условии if, верно?

Я хотел бы напечатать некоторые результаты, если new_date находится после полудня, и другое сообщение, если это после полудня до полуночи.

Есть предложения, как я могу решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 30 мая 2020

Вам нужно сравнить только время из new_date, с 12 преобразованным в объект datetime. Из-за того, как вы выполняли импорт, когда вы используете datetime.time (), это означает, что вы вызываете datetime.datetime.time (), а не datetime.time (), поэтому преобразование не выполняется. Вы можете решить эту проблему, набрав

from datetime import datetime, timedelta, time

, а затем используйте

time()

или

import datetime as dt

, затем используя в соответствующих местах

dt.datetime(), dt.timedelta(), dt.time()

Полный код:

import random
from datetime import datetime, timedelta, time
from pytz import timezone

current_date = datetime.now(timezone('America/Sao_Paulo'))
new_date = current_date - timedelta(days=2)
print (new_date.strftime("%Y-%m-%d %H:%M:%S"))

while new_date <= current_date:
  new_date = new_date + timedelta(minutes=10)
  print (new_date.strftime("%Y-%m-%d %H:%M:%S"))
  if new_date.time() < time(12):
    print("test")
0 голосов
/ 30 мая 2020

Сравните с new_date.hour вместо datetime.time ()

import random
from datetime import datetime, timedelta
from pytz import timezone

current_date = datetime.now(timezone('America/Sao_Paulo'))
new_date = current_date - timedelta(days=2)
print (new_date.strftime("%Y-%m-%d %H:%M:%S"))

while new_date <= current_date:
  new_date = new_date + timedelta(minutes=10)
  print (new_date.strftime("%Y-%m-%d %H:%M:%S"))
  if new_date.hour < 12:
    print("before noon")
  elif new_date.hour >= 18:
    print("after 6 pm")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...