Python:给出错误结果的日期和时间差

2024-04-29 23:07:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个简单的代码来检查2个日期时间戳之间的时间差是否超过7天,即604800秒。在

如果以秒为单位的时间超过604800,则应打印“Relax you have time!!!”在

请在下面找到我的代码:

import time, datetime, sys, os 
start_time = time.time() 
from datetime import datetime, timedelta, date 
from dateutil.parser import *

datetime1="2018-07-13 03:30:00"  
datetime2="2018-07-20 04:30:00" 
datetime2=datetime.strptime(datetime2, "%Y-%m-%d %H:%M:%S").date() # this is to convert it into a datetime object
datetime1=datetime.strptime(datetime1, "%Y-%m-%d %H:%M:%S").date() # this is to convert it into a datetime object

difference1 =(datetime2-datetime1).total_seconds() 
print("the difference in seconds is "+str(difference1)) 
if difference1 > 604800: #if the difference is more than 7 days, relax , else start preparing
  print("Relax you have time!!!") 
else:
  print("You need to start preparing!!!!!")

问题:

只有当我将“datetime2”更改为“2018-07-21”时,代码才会以秒为单位计算时间超过604800,这意味着它计算的是舍入天数而不是秒数,然后简单地将舍入的天数转换为秒数,给出错误的答案。在

例如,在上面的代码中,由于“datetime2”实际上与“datetime1”的距离超过604800秒(准确地说是608400秒),输出应该是“Relax you have time!!!”,但我们得到了不同的输出。在

我做了什么来解决这个问题?

到目前为止,我已经看过类似的问题:

How do I check the difference, in seconds, between two dates?(不适合我,因为我得到了TypeError:需要一个整数(get type日期时间.日期))在

以及 Time difference in seconds (as a floating point)(这只满足于非常微小的时间差,并且当用户自己输入时间戳时不会捕捉到场景)

以及 How to calculate the time interval between two time strings(这是我在我的代码中所做的,但它没有按预期工作)

你能在我的代码中提出这个问题吗?在

更新:感谢@Tim Peters指出.date()丢弃了小时、分钟和秒。 我只需要丢弃.date()就可以正常工作了。在


Tags: theto代码youdatetimedatetimeis
1条回答
网友
1楼 · 发布于 2024-04-29 23:07:05

在本例中,问题是您使用strptime创建两个datetime.datetime对象,并立即将它们截断为datetime.date对象,这些对象没有时间组件(小时、分钟、秒、微秒、tzinfo),因此您将得到两个相隔7天的日历日期。在

您可以这样修复原始代码:

from datetime import datetime, timedelta

datetime1 = "2018-07-13 03:30:00"
datetime2 = "2018-07-20 04:30:00"

# The following creates two datetime.datetime objects
datetime2 = datetime.strptime(datetime2, "%Y-%m-%d %H:%M:%S")
datetime1 = datetime.strptime(datetime1, "%Y-%m-%d %H:%M:%S")

difference1 =(datetime2-datetime1).total_seconds() 
print("the difference in seconds is "+str(difference1)) 

# if the difference is more than 7 days, relax , else start preparing
if difference1 > 604800:
  print("Relax you have time!!!") 
else:
  print("You need to start preparing!!!!!")

但还有一点需要注意的是,datetime.timedelta对象可以直接比较,因此不需要计算秒数,因此可以更改该部分以避免“秒数”计算(而且您的意图更清楚):

^{pr2}$

我想,实际上,您并没有像本例中那样从字符串文本构造datetime.datetime对象,但是如果您是这样,我还需要注意的是,您也可以直接构造这些文本,因此在进行重构之后,我将如何编写您的示例:

from datetime import datetime, timedelta

# The following creates two datetime.datetime objects
datetime1 = datetime(2018, 7, 13, 3, 30)
datetime2 = datetime(2018, 7, 20, 4, 30)

difference1 = datetime2 - datetime1

# if the difference is more than 7 days, relax , else start preparing
if difference1 > timedelta(days=7):
  print("Relax you have time!!!") 
else:
  print("You need to start preparing!!!!!")

相关问题 更多 >