减去指定为字符串的两个时刻

时间:2016-04-25 13:36:12

标签: python datetime

我有一个日期时间对象

2016-04-11 19:46:46-04:00

2016-04-25 09:35:18.464966(这一个是datetime.datetime.now()

如何将它们设置为相同的格式以便我可以减去它们?

3 个答案:

答案 0 :(得分:1)

您可以使用dateutil.parser

from dateutil.parser import *
import datetime

date1="2016-04-11 19:46:46-04:00"
date2=datetime.datetime.now()
updated_date1=parse(date1, ignoretz=True) #Ignoring TimeZone
updated_date2=parse(str(date2))
result=updated_date2 - updated_date1
print result

答案 1 :(得分:0)

您的第一个日期字符串包含时区,datetime.datetime.now()无时区。

您可以像这样解析第一个字符串:

>>> d1=datetime.datetime.strptime("2016-04-11 19:46:46-0400", "%Y-%m-%d %H:%M:%S%z")
>>> print(d1)
2016-04-11 19:46:46-04:00

或者,如果您在时区偏移量中有:,则需要使用正则表达式或分区将其删除:

>>> datetime.datetime.strptime(''.join('2016-04-11 19:46:46-04:00'.rpartition(':')[0::2]), "%Y-%m-%d %H:%M:%S%z")
datetime.datetime(2016, 4, 11, 19, 46, 46, tzinfo=datetime.timezone(datetime.timedelta(-1, 72000)))

请注意,我已经在Python 3中完成了这项工作,因为3.2之前的Python是spotty支持%z指令。 (仅当用于构建Python的C库支持它时才支持它.Python 3.2及更高版本具有本机支持。)

现在要比较或添加/减去您需要将时区添加到datetime.datetime.now()或将其从d1中删除。以下是删除它的方法:

>>> d1.replace(tzinfo=None)
datetime.datetime(2016, 4, 11, 19, 46, 46)

然后你可以减去:

>>> d1.replace(tzinfo=None)-datetime.datetime.now()
datetime.timedelta(-14, 42738, 274649)

如果你想让时区空闲时间与时区相同,你可以这样做:

>>> d1-datetime.datetime.now().replace(tzinfo=d1.tzinfo)
datetime.timedelta(-14, 41899, 435274)

答案 2 :(得分:0)

  

原始字典看起来像{“名称”:“日期”,“价值”:“星期一,2016年4月11日19:46:46 -0400”}   ...
  这个是datetime.datetime.now()

查找自给定时间以来经过的秒数(指定为字符串):

import time
from email.utils import parsedate_tz, mktime_tz

d = {"name": "Date", "value": "Mon, 11 Apr 2016 19:46:46 -0400"}
then = mktime_tz(parsedate_tz(d['value']))
now = time.time()
elapsed_seconds = now - then

请勿混淆datetime 对象type(obj) == datetime.datetime)和字符串(type(obj) == str)。