Итак, в двух словах, вы хотите проанализировать строку без информации о часовом поясе, но чей часовой пояс вы будете принимать , и преобразовать ее в UTC и, возможно, в наивную временную метку в UTC. Я не знаю, насколько достоверно ваше предположение о часовом поясе как о системном времени, но это вам нужно выяснить.
Давайте начнем с этой заметки:
Для указанных выше констант часового пояса ([...] timezone
[...]) значение определяется правилами часового пояса, действующими во время загрузки модуля или при последнем вызове tzset()
, и может быть неверно для времен в прошлом. Рекомендуется использовать tm_gmtoff
и tm_zone
результаты из localtime()
для получения информации о часовом поясе.
Итак, начнем с замены from time import timezone as diff_to_utc
на это:
import time
local_offset = time.localtime().tm_gmtoff
Затем вы просто анализируете вашу строку для наивного объекта datetime:
from datetime import datetime
time_str = '2018-09-15T15:30:00'
naive = datetime.strptime(time_str, '%Y-%m-%dT%H:%M:%S')
# datetime.datetime(2018, 9, 15, 15, 30)
Затем отметьте эту временную метку, добавив к ней информацию о часовом поясе, которую вы определили (любым способом):
from datetime import timezone, timedelta
aware = naive.astimezone(timezone(timedelta(seconds=local_offset)))
# datetime.datetime(2018, 9, 15, 15, 30, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))
Затем, если необходимо, преобразовать его в UTC:
utc = aware.astimezone(timezone.utc)
# datetime.datetime(2018, 9, 15, 13, 30, tzinfo=datetime.timezone.utc)
А если вам как-то это нужно, сделайте его снова наивным:
naive_utc = utc.replace(tzinfo=None)
# datetime.datetime(2018, 9, 15, 13, 30)