今日の17:00:00がすでに過ぎている場合は、今日の日付である必要があります。それ以外の場合は、昨日の日付です。今日の時間は次のとおりです。
test = datetime.datetime.now().replace(hour=17,minute=0,second=0,microsecond=0)
しかし、私は将来の時間を持ちたくありません。どうすれば修正できますか?
現在の時刻が17:00未満であるかどうかを確認できます。そうである場合は、生成された時刻オブジェクトから1日を減算します。
test = datetime.datetime.now().replace(hour=17,minute=0,second=0,microsecond=0)
if datetime.datetime.now() < test:
test = test - datetime.timedelta(days=1)
datetime.time
時間を比較するには、今日のを直接使用することをお勧めします。次に、を使用datetime.timedelta
して計算を行います。
if datetime.datetime.now().time() > datetime.time(17,0):
# today, as it's after 17 o'clock
test = datetime.date.today()
else:
# yesterday, as it's before 17 o'clock
test = datetime.date.today() - datetime.timedelta(days=1)
時間帯に応じて、テストを今日または昨日に設定します。
from datetime import datetime, date, timedelta
if datetime.now().strftime('%H:%M') > '17:00':
test = date.today()
else:
test = date.today() - timedelta(days=1)
Pythonの日時関数は、実際には非常に便利でない場合があります。ケースにオブジェクトを使用することはできますがdatetime.timedelta
、月や年を数えるなど、日単位の時間を差し引くのは面倒になります。したがって、遅かれ早かれ1日だけ追加したくない場合は、この関数を試してみてください。
import datetime
import calendar
def upcount(dt, years=0, months=0, **kwargs):
"""
Python provides no consistent function to add time intervals
with years, months, days, minutes and seconds. Usage example:
upcount(dt, years=1, months=2, days=3, hours=4)
"""
if months:
total_months = dt.month + months
month_years, months = divmod(total_months, 12)
if months == 0:
month_years -= 1
months = 12
years += month_years
else:
months = dt.month
years = dt.year + years
try:
dt = dt.replace(year=years, month=months)
except ValueError:
# 31st march -> 31st april gives this error
max_day = calendar.monthrange(years, months)[1]
dt = dt.replace(year=years, month=months, day=max_day)
if kwargs:
dt += datetime.timedelta(**kwargs)
return dt