如何比较两个日期?

Cec*_*uez 344 python datetime

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

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

Fre*_*Foo 444

使用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)
Run Code Online (Sandbox Code Playgroud)

  • 如果有人想知道的话,这也适用于时区感知值. (18认同)
  • @Emadpres:想象一下这是手动输入的.过去行首先输入,而当前行输入第二行...所以过去行首先输入,所以过去<present是True. (18认同)
  • 变量名应该是 `past` 和 `past_but_a_little_after`。从技术上讲,当比较 `past &lt;present` 时,`present` 也是过去的。 (3认同)
  • "过去"和"现在"之间有什么不同?我无法理解你的例子,其结果没有意义. (2认同)
  • 在文档中引用:“如果一个比较器是幼稚的而另一个知道,则尝试进行顺序比较时会引发TypeError。对于相等比较,幼稚的实例永远不会等于已知的实例。如果两个比较器都知道并且具有相同的tzinfo属性,将忽略常见的tzinfo属性,并比较基本日期时间。如果两个比较符都知道并且具有不同的tzinfo属性,则首先通过减去其UTC偏移量(从self.utcoffset()获得)来调整比较符。 (2认同)

Gui*_*ira 66

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

  • 只需在上面的代码之前执行...“导入时间”:) (8认同)

Dan*_*ill 38

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).

文档.

  • 最后一个例子不起作用。无论如何,将两个日期相加是没有意义的。 (2认同)

Lui*_*uis 5

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

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

import datetime

eight_am = datetime.time( 8,0,0 ) # Time, without a date
Run Code Online (Sandbox Code Playgroud)

后来比较:

datetime.datetime.now().time() > eight_am  
Run Code Online (Sandbox Code Playgroud)

这将返回 True