如何减去从API服务器接收到的时间和Python中的当前时间

如何减去从API服务器接收到的时间和Python中的当前时间,python,time,iso8601,Python,Time,Iso8601,请帮助我回答以下问题: 我从API服务器获得的估计时间如下: 2019-09-25T20:11:23+08:00 它似乎是带时区的ISO8601标准 我想知道如何计算从上述值到当前时间还剩多少天、小时、分钟和秒 import datetime Receved_time_frim_API = "2019-09-25T20:11:23+08:00" Current_time = datetime.datetime.now() left_days = left_hour = left_min =

请帮助我回答以下问题:

我从API服务器获得的估计时间如下:
2019-09-25T20:11:23+08:00

它似乎是带时区的ISO8601标准

我想知道如何计算从上述值到当前时间还剩多少天、小时、分钟和秒

import datetime

Receved_time_frim_API = "2019-09-25T20:11:23+08:00"
Current_time = datetime.datetime.now()

left_days = 
left_hour =
left_min =
left_sec =


好的,首先您需要将
recved\u time\u frim\u API
解析为日期时间格式:

from dateutil import parser
Receved_time_frim_API = parser.parse("2019-09-25T20:11:23+08:00")
但您不能仅从
当前时间中减去它,因为
datetime.now()
不知道时区:

from datetime import timezone
Current_time = datetime.datetime.now().replace(tzinfo=timezone.utc)
print (Current_time-Receved_time_frim_API)

结果是一个
datetime.timedelta

您的时间字符串包含时区信息。据介绍,在Python3.7中很容易将其转换为datetime对象

import datetime
received = datetime.datetime.fromisoformat(Receved_time_frim_API)
在以前的版本中,没有简单的一行程序可以将带有时区的字符串转换为datetime对象。如果您使用的是早期的python版本,您可以尝试一些粗糙的东西,比如

>>> date, timezone = Receved_time_frim_API.split("+")
>>> tz_hours, tz_minutes = timezone.split(":")
>>> date = datetime.datetime.strptime(date, "%Y-%m-%dT%H:%M:%S")
>>> date -= datetime.timedelta(hours=int(tz_hours))
>>> date -= datetime.timedelta(minutes=int(tz_minutes))
请注意,这仅适用于正时区的情况

要减去两个datetime对象,请使用

td = date - Current_time
left_days = td.days
left_hour = td.seconds // 3600
left_min = (td.seconds//60)%60
left_sec = td.seconds % 60

还请展示您为解决问题所做的尝试。非常感谢您在我思考的过程中进行的快速研究,如果时区为正,则应从日期中减去小时数。我调整了答案非常感谢你的快速研究