我花了一些时间试图弄清楚如何在时间值之间获得时间差。唯一的问题是其中一个时间存储在一个文件中。所以我有一个基本上是str(datetime.datetime.now())
和datetime.datetime.now()
的字符串。
具体来说,我在获取delta时遇到问题,因为其中一个对象是日期时间对象而另一个是字符串。
我认为答案是我需要在datetime对象中返回字符串以使delta工作。
我已经查看了与此相关的其他一些Stack Overflow问题,包括以下内容:
Python - Date & Time Comparison using timestamps, timedelta
Comparing a time delta in python
Convert string into datetime.time object
Converting string into datetime
示例代码如下:
f = open('date.txt', 'r+')
line = f.readline()
date = line[:26]
now = datetime.datetime.now()
then = time.strptime(date)
delta = now - then # This does not work
谁能告诉我哪里出错了?
作为参考,前26个字符是从文件的第一行获取的,因为这就是我存储时间的方式,例如。
f.write(str(datetime.datetime.now())
会写下以下内容: 2014-01-05 13:09:42.348000
答案 0 :(得分:3)
time.strptime
返回struct_time。
datetime.datetime.now()
返回datetime
个对象。
这两个不能直接减去。
您可以使用time.strptime
代替datetime.datetime.strptime
,而datetime
会返回now
个对象。然后,您可以减去then
和import datetime as DT
now = DT.datetime.now()
then = DT.datetime.strptime('2014-1-2', '%Y-%m-%d')
delta = now - then
print(delta)
# 3 days, 8:17:14.428035
。
例如,
time.strptime
顺便说一句,您需要向DT.datetime.strptime
或time.strptime(date)
提供日期格式字符串。
'Fri, 10 Jun 2011 11:04:17 '
应该引发一个ValueError。
看起来您的日期字符串长度为26个字符。这可能意味着您有一个类似then = DT.datetime.strptime('Fri, 10 Jun 2011 11:04:17 '.strip(), "%a, %d %b %Y %H:%M:%S")
print(then)
# 2011-06-10 11:04:17
的日期字符串。
如果确实如此,您可能需要像这样解析它:
%Y
有一张表格描述了可用的指令(例如%m
,{{1}}等){} {}}。
答案 1 :(得分:0)
试试这个:
import time
import datetime
d = datetime.datetime.now()
now = time.mktime(d.timetuple())
然后应用delta
答案 2 :(得分:0)
如果您有'那么'的年,月,日,您可以使用:
year = 2013
month = 1
day = 1
now_date = datetime.datetime.now()
then_date = now_date.replace(year = year, month = month, day = day)
delta = now_date - then_date