如何比较两个日期?

Posted

技术标签:

【中文标题】如何比较两个日期?【英文标题】:How to compare two dates? 【发布时间】:2011-12-29 20:27:44 【问题描述】:

如何使用 Python 比较两个日期以查看哪个日期较晚?

例如,我想检查当前日期是否超过了我正在创建的这个列表中的最后一个日期,即假期日期,以便它会自动发送一封电子邮件,告诉管理员更新 holiday.txt 文件。

【问题讨论】:

呃,您使用 <> 运算符,就像任何其他比较一样。 @JohnMachin:您使用原型int compare_dates(void const *, void const*) 编写一个函数,将两个参数都转换为struct Date * 并实现比较逻辑。对于 Python 新手来说,这可能不是那么明显。 @larsmans:对不起.... docs.python.org/library/datetime.html#datetime-objects Ctrl-F 搜索“支持的操作” @Galaxy - 他使用了一个类比,以表明对于一个经验丰富的人来说应该简单的东西对于一个初学者来说可能并不简单,他正在使用 C 来说明这一点。他不认为这个问题是关于 C 的。他是对的,大约 8 年前我问这个问题时,我还是个初学者,完全不知道它是如何工作的。 【参考方案1】:

使用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)

【讨论】:

这也适用于时区感知值,如果有人想知道的话。 pastpresent 有什么不同?我无法理解您的示例,其结果没有意义。 @Emadpres:想象一下这是手动输入的。过去的行是第一个输入的,而现在的行是第二个输入的......所以过去的行是最先输入的,所以过去的 从文档中引用:“如果一个比较对象是幼稚的,而另一个是有意识的,则如果尝试进行顺序比较,则会引发 TypeError。对于相等比较,天真的实例永远不会等于有意识的实例。如果两者都比较对象是有意识的,并且具有相同的 tzinfo 属性,通用的 tzinfo 属性被忽略并比较基本日期时间。如果两个比较对象都知道并且具有不同的 tzinfo 属性,则首先通过减去它们的 UTC 偏移量来调整比较对象(从 self. utcoffset())。” 变量名应该是pastpast_but_a_little_after。从技术上讲,present 在比较 past &lt; present 时也是过去。【参考方案2】:

datetime.date(2011, 1, 1) &lt; 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】:

使用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 &gt; newdate2 将返回 False newdate1 &lt; newdate2 将返回 True

【讨论】:

只是在上面的代码之前... import time :)【参考方案4】:

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

例如,要检查现在是多于还是少于上午 8:00,我们可以使用:

import datetime

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

然后比较:

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

这将返回True

【讨论】:

【参考方案5】:

要计算两个日期差的天数,可以按如下方式完成:

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

因为如果比到期日多一秒钟,那么我们必须收费

【讨论】:

不回答问题。 你是如何让这段代码运行的?数量 = 罚款,罚款尚未定义.. 此代码不会因此而运行..【参考方案6】:

使用 python 作为可用的最简单的语言,在 python 中比较日期非常容易,python 运算符 &lt;&gt;== 非常适合日期时间对象。 他们每个人在python中都有自己的含义:

&lt; 表示日期早于第一个 &gt; 表示日期较晚 == 表示日期与第一个相同 因此,对于您的情况:
import datetime

date = datetime.datetime(2000, 1, 1) # Replace with whatever you want
now = datetime.datetime.now() # You can even find the current date and time using this expression

if date < now:
    print('past')
elif date > now:
    print('future')
else:
    print('present')
# This would print "past"

【讨论】:

发布的其他答案已经涵盖了该案例。最好寻找新问题来为网站做出贡献。

以上是关于如何比较两个日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何比较Java中的两个字符串日期?

C#代码中如何比较两个日期的大小?

如何在javascript中比较两个字符串日期?

如何使用 SQL 比较两个日期值 [重复]

如何比较Swift 3.2中的两个日期?

sqlserver如何比较两个日期(datetime)的年月大小,比较到年月,不比较日