【问题标题】:Compare current date with future date in Python在 Python 中比较当前日期和未来日期
【发布时间】:2020-08-12 02:41:57
【问题描述】:

我正在尝试将以下格式 (ddmmyyyy) 的当前日期与以下格式 (ddmmyyyy) 的未来日期进行比较

我把它们放在那种格式里,这样我就可以很容易地将它们作为整数进行比较。但是,它一直未能通过 if then 测试。

from datetime import datetime, timedelta

StartDay=datetime.today()  # Get current date in this format 2020-04-28 19:59:16.901897

EndDay=StartDay+timedelta(60) # I want to be able to add 60 days to StartDay 

print(EndDay.strftime('%d%m%Y')) # Print EndDay as an integer 27062020

EndDay=EndDay.strftime('%d%m%Y') # Convert EndDay to make it look like an integer

StartDay=datetime.today().strftime('%d%m%Y') # Convert the StartDay to make it look like an integer

if int(StartDay)>int(EndDay):
    print('Game Over!')
else:
    pass

我想要实现的是日期的整数值,这样未来日期将始终大于过去/当前日期,如果这有意义的话。

【问题讨论】:

  • 只需使用这种格式'%Y%m%d'。您希望您的格式按重要性顺序排列,从大到小。否则,您的 EndDay 日将始终更小,因为在大多数情况下(如果不是全部),60 天略少于 2 个月。
  • 您的设计存在严重缺陷。 每次你运行这个,StartDay将被设置为当前日期,所以EndDay永远无法到达。
  • 你应该在StartDay和EndDay都还是datetime对象时进行比较

标签: python python-3.x date datetime time


【解决方案1】:

你可以直接比较datetime对象,这里不用绕道:

from datetime import datetime
t0, t1 = datetime(2020,1,1), datetime(2020,1,2)

t0>t1
Out[6]: False

t0<t1
Out[7]: True

t1-t0
Out[8]: datetime.timedelta(days=1)

【讨论】:

  • 我认为这不是 OP 要求的。
  • @Anwarvic,我知道,这个例子不太适合评论。此外,鉴于 OP 想要将 ddmmyyyy 点与逻辑中的一些缺陷进行比较,所以为什么不提出不同的方法。
  • OP 想要比较这两个日期,但是当他们使用 datetime 对象到达那里时,他们这样做的方式(基于字符串表示)没有意义。在这种情况下,提供一个实现其预期目标的解决方案,而不是严格按照他们阐明的参数工作不是更好吗?
  • @AlanJones:关键是你应该比较 datetime 对象,正如安德鲁在你的问题下的评论所说的那样。
  • @AlanJones:如果您没有必须进行转换,我建议您避免转换。此外,如果您想使用日期/时间的数字表示,请使用 POSIX 时间戳,例如通过datetime类的timestamp()方法获取。
【解决方案2】:

datetime.datetime 可能很容易转换为datetime.date,然后比较考虑以下示例:

from datetime import datetime, timedelta
StartDay = datetime.today()
EndDay = StartDay + timedelta(60)
StartDate = StartDay.date()  # datetime.date(2020, 4, 28)
EndDate = EndDay.date()  # datetime.date(2020, 6, 27)
print(StartDate < EndDate)  # True

请注意,您也可以将datetime.datetime 直接与datetime.datetime 进行比较,但这也考虑了小于天的单位,因此如果您有两个datetime.datetimes 说d1 和d2 具有相同的年月-day 但不同的时间,那么d1 &lt; d2 的结果可能与d1.date() &lt; d2.date() 不同

【讨论】:

  • 这对于相距很远的日期是否准确?例如 100 天? 300 天等?
  • @AlanJones:在这种情况下,accurate 是什么意思?
  • 我的意思是可靠。例如,如果我将今天的日期与今天 100 天后的日期进行比较。它会返回 true 吗?
  • @AlanJones:为什么不应该呢?至少,datetime module 是 Python 标准库的一部分...
  • 这不会总是计算当前日期和未来日期,这样它就永远不会返回假。我的逻辑是否遗漏了什么?
【解决方案3】:

将 startdate 和 enddate 保留为 'datetime' 并执行以下操作:

from datetime import datetime, timedelta
StartDay=datetime.today()
EndDay=StartDay+timedelta(60) 
delta = (StartDay - EndDay).days
if delta > 0:
    print('Game Over!')
else:
    print('Something else')

这应该可以解决问题

【讨论】:

    猜你喜欢
    • 2017-10-12
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多