如何比较两个日期?


379

如何使用Python比较两个日期以查看稍后的日期?

例如,我想检查当前日期是否超过了我在假期中创建的此列表中的最后日期,因此它将自动发送电子邮件,告诉管理员更新holiday.txt文件。


20
嗯,您可以使用<and >运算符,就像其他任何比较一样。
Daniel Roseman

12
@JohnMachin:您编写了一个带有prototype的函数int compare_dates(void const *, void const*),将两个参数都强制转换为struct Date *并实现比较逻辑。对于Python新手来说可能并不那么明显。
Fred Foo

1
@larsmans:对不起.... s / any_language / any_reasonable_language /和任何习惯使用不合理语言的人都应该花几分钟来仔细阅读文档,并尝试一下date1 <date2
John Machin


1
@Galaxy-他正在使用一个比喻来表明,对于一个经验丰富的人来说应该简单的事情可能对整个初学者来说都不是简单的,并且他正在使用C来说明这一点。他不认为问题与C有关。他是对的,大约8年前我问这个问题的时候,我还是一个完全的初学者,不知道它是如何工作的。
塞西尔·罗德里格斯

Answers:


494

使用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
past和之间有什么区别present?我无法理解您的示例,其结果也没有道理。
Emadpres

19
@Emadpres:想象一下这是手动键入的。过去的行是第一个输入的,而现在的行是第二个输入的...因此,过去的行是第一个输入的,所以past <present是True。
ramcdougal

2
在文档中引用:“如果一个比较器是幼稚的而另一个知道,则尝试进行顺序比较时会引发TypeError。对于相等比较,幼稚的实例永远不会等于已知的实例。如果两个比较器都知道并且具有相同的tzinfo属性,将忽略常见的tzinfo属性,并比较基本日期时间。如果两个比较符都知道并且具有不同的tzinfo属性,则首先通过减去其UTC偏移量(从self.utcoffset()获得)来调整比较符。
Vikas Prasad '18

2
变量名称应为pastpast_but_a_little_after。从技术上讲,present在进行比较时也是过去past < present
grisaitis

74

采用 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 > newdate2will return False
newdate1 < newdate2will returnTrue


39

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)

请参阅文档


3

使用datetime和比较的其他答案也仅适用于时间,没有日期。

例如,要检查现在是否大于或小于8:00,我们可以使用:

import datetime

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

然后与之比较:

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

这将返回 True


-1

要计算两个日期之间的天差,可以按照以下步骤进行:

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

因为如果在截止日期之前还有一秒钟多的时间,那么我们必须收费


不回答问题。
Willwsharp
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.