0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonでdatetime.datetime.now()を使った日付計算をする際の注意

Posted at

概要

datetime.datetime.now()を使って日付を計算しようとしたときに意図しない結果になる場合がある。

datetime.datetime(YYYY, mm, dd)とdatetime.datetime.now()を使って日数の差分を取得したい場合

事例

datetime.datetimeオブジェクトは時刻を省略して日付のみで作成することも出来る。
この場合、時間は0となる。

datetime.datetime
>>> datetime.datetime(2023, 1, 8)
datetime.datetime(2023, 1, 8, 0, 0) # 時刻には0が入る

datetime.datetime.now()を実行すると、現在の日付と時刻が取得される。

datetime.datetime.now()
>>> datetime.datetime.now()
datetime.datetime(2023, 1, 8, 17, 20, 37, 109800)

この状態で日付同士の差分を求めようとすると、各項の順番によって値が変わる。

日付差分(2023年1月8日に実施)
>>> datetime.datetime(2023, 1, 8) - datetime.datetime.now()
datetime.timedelta(days=-1, seconds=23888, microseconds=735007)  # 期待した値はdays=0

>>> datetime.datetime(2023, 1, 9) - datetime.datetime.now()
datetime.timedelta(seconds=23623, microseconds=392751)  # 期待した値はdays=1

>>> datetime.datetime.now() - datetime.datetime(2023, 1, 8) 
datetime.timedelta(seconds=62520, microseconds=388495)  # 期待した値はdays=0

>>> datetime.datetime.now() - datetime.datetime(2023, 1, 9) 
datetime.timedelta(days=-1, seconds=62759, microseconds=391388)  # 期待した値はdays=-1

datetime.datetime.now()関数は現在時刻を持っているため、datetime.datetime(YYYY, mm, dd)で宣言した値と時刻分の差が出来てしまう。

解決策

datetime.datetime.now()からdateime.datetime(YYYY, mm, dd)を引く。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?