Как минусить время, полученное с сервера API и текущее время в Python - PullRequest
0 голосов
/ 25 сентября 2019

Пожалуйста, помогите под моим запросом:

Я получил примерное время от сервера API, как показано ниже: 2019-09-25T20:11:23+08:00

похоже на стандарт ISO 8601 с часовым поясом.

Я хотел бы знать, как рассчитать, сколько дней, часов, минут и секунд осталось от значения, указанного выше, до текущего времени.

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 =

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Ваша строка времени содержит информацию о часовом поясе.Согласно https://stackoverflow.com/a/13182163/12112986 его легко преобразовать в объект datetime в python 3.7

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
0 голосов
/ 25 сентября 2019

Хорошо, сначала вам нужно разобрать Receved_time_frim_API в формат даты и времени:

from dateutil import parser
Receved_time_frim_API = parser.parse("2019-09-25T20:11:23+08:00")

Но вы не можете просто вычесть это из вашего Current_time, потому что datetime.now() не знает о часовом поясе:

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

В результате получается datetime.timedelta

...