日付がdatetime.today()と同じ日であるかどうかを確認するにはどうすればよいですか?


88

この状態Trueは、時間を比較しているため、同じ日であっても常に評価されます。

from datetime import datetime

# ...

if date_num_posts < datetime.today(): 

日付がと同じ日datetime.today()かどうかを確認するにはどうすればよいですか?

回答:


169

日付を比較したいだけなら、

yourdatetime.date() < datetime.today().date()

または、明らかに、

yourdatetime.date() == datetime.today().date()

それらが同じ日付であることを確認したい場合。

通常、ドキュメントは役に立ちます。これは通常、の最初のGoogle検索結果でもありpython thing_i_have_a_question_aboutます。あなたの質問が「ヘビ」という名前の関数/モジュールに関するものでない限り。

基本的に、datetimeモジュールには、特定の時点を格納するための3つのタイプがあります。

  • date 年、月、日
  • time 時間、分、秒、マイクロ秒、タイムゾーン情報
  • datetime日付と時刻を組み合わせます。これには、対応するオブジェクトとオブジェクトを取得するためのメソッドdate()とがあり、結合してに変換するための便利な関数があります。time()datetimecombinedatetimedatetime

2
「これは通常、Pythonthing_i_have_a_question_aboutの最初のグーグル結果でもあります」そして、誰かがこのトピックについてSOエントリを作成しない限り、ここで起こったように:)
アクティビティの削減

37
  • 月の値のみを比較する必要がある場合は、次のコードを使用できます。

    if yourdate.day == datetime.today().day:
        # do something
    
  • 2つの日付の差が許容できることを確認する必要がある場合は、timedeltaを使用できます 。

    if (datetime.today() - yourdate).days == 0:
        #do something
    
  • そして、単に使用できるよりも日付部分のみを比較したい場合:

    from datetime import datetime, date
    if yourdatetime.date() < datetime.today().date()
        # do something
    

timedeltaの形式は次のとおりです。

datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

したがって、本当に必要なものに応じて、日、秒、ミリ秒、分などで差分を確認できます。

from datetime import datetime
if (datetime.today() - yourdate).days == 0:
    #do something

2つの日付が完全に同じであることを確認する必要がある場合は、timedelta(0)を使用できます。

from datetime import datetime, timedelta
if (datetime.today() - yourdate) == timedelta(0):
    #do something

1
.dayは月の日です。したがって、8月12日は、最初のコードスニペットを使用した12月12日と「同じ」です。それはおそらくOPが望んでいる振る舞いではありません。
真実性2011年

@ trutheality-はい、質問が編集される前に答えを書き始めたので、彼が正確に何を必要としているか理解できませんでした。そのため、これにいくつかのオプションを提供します
Artsiom Rudzenka 2011年

1
クイックノート:datetimeオブジェクトには「day」(「s」なし)という属性があり、timedeltaオブジェクトには「days」(「s」付き)という属性があり、構文が機能しない理由に戸惑うことがあります。
コルトンヒックス2017

3

時間、分、秒、マイクロ秒を好きなように設定できます

datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)

しかし、真実性の答えは、それらがすべてゼロであり、あなたがただ比較することができるときにおそらく最良です .date()、時間のsを

数百の日時を比較する必要がある場合は、replace()1回の呼び出しと数百の呼び出しを行うだけでよいので、おそらくより高速です。date()


突然変異がなければ、私はこれに投票します。ただし、比較している日時オブジェクトのクローンを作成し、サブデイ解像度のフィールドを削除してそれらを変更し、コピーを比較することで、この方法を適応させることができます。
ninjagecko 2011年

1
@ninja、変異しません。replace()は、str.replace()と同様に、新しい日時オブジェクトを返します
John La Rooy 2011年

2
all(getattr(someTime,x)==getattr(today(),x) for x in ['year','month','day'])

を使用して比較する必要.date()がありますが、たとえば、月ごとや分ごとに比較したい場合などに備えて、この方法を例として残しておきます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.