Python - 字符串和now()的时间增量

时间:2014-01-05 13:11:03

标签: python datetime

我花了一些时间试图弄清楚如何在时间值之间获得时间差。唯一的问题是其中一个时间存储在一个文件中。所以我有一个基本上是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

3 个答案:

答案 0 :(得分:3)

time.strptime返回struct_time。 datetime.datetime.now()返回datetime个对象。 这两个不能直接减去。

您可以使用time.strptime代替datetime.datetime.strptime,而datetime会返回now个对象。然后,您可以减去thenimport 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.strptimetime.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