Вы получаете правильную метку времени, если вы интерпретируете строку времени ввода как время в UTC.
Примечание: этот вывод основан только на
("20150219-0700", 1424329200000)
паре, которая согласуется с UTC, но этого недостаточно в общем случае, например, вы получаете точный результат, если строка времени ввода находится в еврозоне/лондонском часовом поясе (
GMT+0000
), что имеет
Вы должны знать, входной часовой пояс для преобразования времени в POSIX временной метки:
#!/usr/bin/env python3
from datetime import datetime, timedelta
import pytz # $ pip install pytz
Epoch = datetime(1970, 1, 1, tzinfo=pytz.utc)
tz = pytz.timezone('Europe/London') # input timezone
naive_dt = datetime.strptime("20150219-0700", "%Y%m%d-%H%M")
dt = tz.localize(naive_dt, is_dst=None) # make it aware
timestamp_millis = (dt - Epoch) // timedelta(milliseconds=1)
# -> 1424329200000
Примечание: последнее выражение может дать более точный результат, чем int(dt.timestamp()*1000)
или int(diff.total_seconds()*1000)
формул. См. Обсуждение в проблеме Python: timedelta.total_seconds needlessly inaccurate, especially for negative timedeltas, например, «n/10**6
и n/1e6
- это не то же самое».
Если вы уверены, что входной часовой пояс UTC, то вы можете оставить вход в наивных объекты даты и времени:
#!/usr/bin/env python3
from datetime import datetime
Epoch = datetime(1970, 1, 1)
utc_dt = datetime.strptime("20150219-0700", "%Y%m%d-%H%M")
timestamp_millis = (utc_dt - Epoch) // timedelta(milliseconds=1)
Добро пожаловать на разницу между местным и универсальным временем. –