Я пытаюсь ввести данные в API Hubspot, используя Python.
У меня есть даты в формате %m%d%Y. Мне нужно преобразовать это во время UNIX в миллисекундах. Я установил эту часть, я полагаю, используя приведенный ниже код.
t = '09/02/2020'
t = datetime.strptime(t, "%m/%d/%Y").strftime("%Y-%m-%dT%H:%M:%S.%f")
ts = time.mktime(datetime.strptime(t, "%Y-%m-%dT%H:%M:%S.%f").timetuple())
ts * 10000
ts = int(ts)
Конечным результатом для этого примера является
t= 2020-09-02T00:00:00.000000
ts = 1599019200
Если я возьму результат ts и помещу его в https://www.unixtimestamp.com/index.php, он преобразуется в 02.09.2020 в 4:00 (UTC)
Однако Hubspot говорит: «Свойства даты будут хранить только дату и должны быть установлены на полночь UTC для нужной вам даты».
Где я потерялся, так это в том, что я не знаю, как настроить это так, чтобы результат всегда устанавливался на полночь UTC, и я не могу найти никаких примеров, которые помогли бы мне это сделать.
Кто-нибудь может помочь объяснить, как это сделать?
Существует метод datetime.timestamp() , который возвращает дату в формате unixtime, но если вы заглянете в документацию этого метода, то увидите:
Примечание. Не существует способа получить временную метку POSIX непосредственно из наивного экземпляра datetime, представляющего время UTC. Если ваше приложение использует это соглашение, а системный часовой пояс не установлен в UTC, вы можете получить временную метку POSIX, указав tzinfo=timezone.utc: timestamp = dt.replace(tzinfo=timezone.utc).timestamp() или путем прямого вычисления метки времени: timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
Итак, следующие решения для документов:
from datetime import datetime, timezone, timedelta
t = "09/02/2020"
ts = datetime.strptime(t, "%m/%d/%Y").replace(tzinfo=timezone.utc).timestamp()
# OR
ts = (datetime.strptime(t, "%m/%d/%Y") - datetime(1970, 1, 1)).total_seconds()
Ts * 10000 -- Вы имели в виду ts = ts * 10000. Вы можете записать это как ts *= 10000