【问题标题】:Python - Time delta from string and now()Python - 来自字符串和 now() 的 Timedelta
【发布时间】:2014-01-05 13:11:02
【问题描述】:

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

【问题讨论】:

  • 感谢所有回复。问题已解决,再次感谢。

标签: python datetime


【解决方案1】:

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

您可以使用datetime.datetime.strptime 代替time.strptime,它返回一个datetime 对象。然后你可以减去nowthen

例如,

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.strptimeDT.datetime.strptime 提供日期格式字符串。

time.strptime(date)

应该引发 ValueError。


您的日期字符串看起来有 26 个字符长。这可能意味着您有一个日期字符串,例如 'Fri, 10 Jun 2011 11:04:17 '

如果是这样,您可能希望像这样解析它:

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 等)here

【讨论】:

  • 感谢您对我哪里出错的实际解释。很有帮助。
【解决方案2】:

试试这个:

import time
import datetime
d = datetime.datetime.now()
now  = time.mktime(d.timetuple())

然后应用增量

【讨论】:

    【解决方案3】:

    如果你有'then'的年月日,你可以使用:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多