2つの日付を比較する方法は?


381

Pythonを使用して2つの日付を比較して、どちらが遅いかを確認するにはどうすればよいですか?

たとえば、現在の日付が私が作成しているこのリストの最終日を過ぎているかどうかを確認します。これにより、休日の日付が自動的に送信され、holiday.txtファイルを更新するように通知されます。


20
えーと、他の比較と同じように<and >演算子を使います。
ダニエルローズマン

12
@JohnMachin:プロトタイプint compare_dates(void const *, void const*)で関数を記述し、両方の引数をキャストしstruct Date *て比較ロジックを実装します。Pythonの初心者にはそれほど明白ではないかもしれません。
Fred Foo

1
@larsmans:すみません.... s / any_language / any_reasonable_language /および不合理な言語に慣れている人は、ドキュメントを熟読し、date1 <date2
John Machin

2
docs.python.org/library/datetime.html#datetime-objects Ctrl-Fで「サポートされている操作」を検索
John Machin

1
@Galaxy-彼はアナロジーを使用しており、ベテランの人にとって単純なはずのことは完全な初心者にとっては単純ではないかもしれないことを示しており、彼はこれを説明するためにCを使用しています。彼は問題がCに関するものだとは思っていません。そして彼は正しかった、私がこの質問をほぼ8年前に尋ねたとき、私は完全に初心者であり、それがどのように機能するのか手掛かりがありませんでした。
セシルロドリゲス

回答:


495

使用datetime方法とオペレータ<とその親族を。

>>> from datetime import datetime, timedelta
>>> past = datetime.now() - timedelta(days=1)
>>> present = datetime.now()
>>> past < present
True
>>> datetime(3000, 1, 1) < present
False
>>> present - datetime(2000, 4, 4)
datetime.timedelta(4242, 75703, 762105)

19
誰かが疑問に思っていたとしても、これはタイムゾーン対応の値でも機能します。
Mat Gessel

2
何が違うの間だpastpresent?私はあなたの例を理解できず、その結果は意味がありません。
Emadpres 2017年

19
@Emadpres:これが手動で入力されたと想像してください。過去の行が最初に入力され、現在の行が2番目に入力されました...したがって、過去の行が最初に入力されたので、過去<現在はTrueです。
ramcdougal 2017年

2
文書からの引用:「一方の被比較数がナイーブで、もう一方が認識している場合、順序比較が試行されるとTypeErrorが発生します。等価比較の場合、単純なインスタンスは認識しているインスタンスと決して等しくありません。両方の被比較数が認識していて、同じである場合tzinfo属性、共通のtzinfo属性は無視され、基本の日時が比較されます。両方の被比較数が認識されており、異なるtzinfo属性を持っている場合、最初に被比較数は、それらのUTCオフセット(self.utcoffset()から取得)を差し引いて調整されます。
ヴィカスプラサド

2
変数名はpastおよびでなければなりませんpast_but_a_little_after。技術的にpresentは、比較past < presentが行われるときも過去です。
グリザイチ

75

使用する time

次のような文字列として最初の日付があるとします。
date1 = "31/12/2015"
date2 = "01/01/2016"

次のことを実行できます:
newdate1 = time.strptime(date1, "%d/%m/%Y")そしてnewdate2 = time.strptime(date2, "%d/%m/%Y")、それらをpythonの日付形式に変換します。次に、比較は明らかです:

newdate1 > newdate2戻りFalse
newdate1 < newdate2ます戻りますTrue


40

datetime.date(2011, 1, 1) < datetime.date(2011, 1, 2)戻りTrueます。

datetime.date(2011, 1, 1) - datetime.date(2011, 1, 2)戻りdatetime.timedelta(-1)ます。

datetime.date(2011, 1, 1) + datetime.date(2011, 1, 2)戻りdatetime.timedelta(1)ます。

docsを参照してください。


3

使用する他の回答datetimeと比較も、日付がなくても時間のみで機能します。

たとえば、今のところ午前8時より多いか少ないかを確認するには、次のコマンドを使用できます。

import datetime

eight_am = datetime.time( 8,0,0 ) # Time, without a date

そして後で比較します:

datetime.datetime.now().time() > eight_am  

戻ります True


-1

2つの日付の差の日数を計算するには、次のように実行できます。

import datetime
import math

issuedate = datetime(2019,5,9)   #calculate the issue datetime
current_date = datetime.datetime.now() #calculate the current datetime
diff_date = current_date - issuedate #//calculate the date difference with time also
amount = fine  #you want change

if diff_date.total_seconds() > 0.0:   #its matching your condition
    days = math.ceil(diff_date.total_seconds()/86400)  #calculate days (in 
    one day 86400 seconds)
    deductable_amount = round(amount,2)*days #calclulated fine for all days

納期が1秒以上ある場合は、充電する必要があるため、


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