Ключ должен гарантировать, что все даты, которые вы используете, находятся в часовом поясе utc, прежде чем вы начнете конвертировать. См. http://pytz.sourceforge.net/, чтобы узнать, как сделать это правильно. Нормализуя до utc, вы устраняете неоднозначность переходов на летнее время. Затем вы можете безопасно использовать timedelta для расчета расстояния от эпохи Unix, а затем преобразовать в секунды или миллисекунды.
Обратите внимание, что полученная метка времени Unix сама находится в часовом поясе UTC. Если вы хотите увидеть метку времени в локализованном часовом поясе, вам нужно будет выполнить другое преобразование.
Также обратите внимание, что это будет работать только для дат после 1970 года.
import datetime
import pytz
UNIX_EPOCH = datetime.datetime(1970, 1, 1, 0, 0, tzinfo = pytz.utc)
def EPOCH(utc_datetime):
delta = utc_datetime - UNIX_EPOCH
seconds = delta.total_seconds()
ms = seconds * 1000
return ms