Чтобы преобразовать локальную информацию о времени и дате в UTC на основе географического местоположения, вы можете просто передать произвольную метку времени в API часовых поясов Google с основной целью получения timeZoneId
для местоположения.
Пример запроса:
https://maps.googleapis.com/maps/api/timezone/json?location=39.6034810,-119.6822510×tamp=0&key=YOUR_API_KEY
Пример ответа:
{
"dstOffset" : 0,
"rawOffset" : -28800,
"status" : "OK",
"timeZoneId" : "America/Los_Angeles",
"timeZoneName" : "Pacific Standard Time"
}
Тогда вы могли бы использовать timeZoneId
и введенную пользователем информацию о дате и времени вместе с pytz
, чтобы создать объект даты и времени Python по местному времени, а также получить метку времени UTC, которую, я думаю, вы ищете. Этот подход будет обрабатывать переход на летнее время на основе введенной пользователем даты. Например:
from datetime import datetime
from pytz import timezone, utc
pacific = timezone('America/Los_Angeles')
pdt = pacific.localize(datetime(2018, 5, 1, 8, 0, 0))
pst = pacific.localize(datetime(2018, 12, 1, 8, 0, 0))
pdt_utc = pdt.astimezone(utc)
pst_utc = pst.astimezone(utc)
# Pacific Daylight Time
print(pdt)
# 2018-05-01 08:00:00-07:00
# Pacific Standard Time
print(pst)
# 2018-12-01 08:00:00-08:00
# UTC
print(pdt_utc)
# 2018-05-01 15:00:00+00:00
print(pst_utc)
# 2018-12-01 16:00:00+00:00
Важно: я не проверял это со всеми возможными возвращаемыми значениями из API для timeZoneId
, чтобы гарантировать, что то, что возвращается из API, будет правильно интерпретировано pytz
(это работает с примером часового пояса " America / Los_Angeles ", но вам нужно проверить, чтобы убедиться, что это надежное решение для географических регионов, с которыми вы работаете).