我有一个日期时间对象
2016-04-11 19:46:46-04:00
和
2016-04-25 09:35:18.464966
(这一个是datetime.datetime.now()
)
如何将它们设置为相同的格式以便我可以减去它们?
答案 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
)。