Я пытаюсь сделать что-то действительно простое, преобразовать объект datetime
через три дня в будущее в метку времени Unix UTC:
import datetime, time
then = datetime.datetime.now() + datetime.timedelta(days=3)
# Method 1
print then.strftime("%s")
# Method 2
print time.mktime(then.timetuple())
# Method 3
print time.mktime(then.timetuple()) * 1000
Методы 1 и 2 дают мне время Unix в секундах , а не в миллисекундах, а метод 3 дает мне миллисекунды без фактической точности в миллисекундах.
Когда я просто печатаю , затем
, я получаю datetime.datetime (2011, 11, 19, 15, 16, 8, 278271)
, поэтому я знаю, что точность доступна в миллисекундах. Как я могу получить временную метку Unix с фактической точностью до миллисекунды? возвращается как число с плавающей запятой, и мне нужно сгладить его до int
, это нормально. Есть ли решение, которое я ищу для этого?
Если придерживаться datetime в UTC, вы можете придерживаться этой абстракции и использовать timedelta:
from datetime import datetime, timedelta
epoch = datetime.utcfromtimestamp(0)
def dt_from_ms(ms):
return datetime.utcfromtimestamp(ms / 1000.0)
def dt_to_ms(dt):
delta = dt - epoch
return int(delta.total_seconds() * 1000)
затем:
now = datetime.utcnow()
now
-> datetime.datetime(2017, 1, 25, 1, 30, 42, 765846) # note microsecond precision
dt_to_ms(now)
-> 1485307842765
dt_from_ms(1485307842765)
-> datetime.datetime(2017, 1, 25, 1, 30, 42, 765000) # note millisecond precision
then = now + timedelta(days=3)
dt_to_ms(then)
-> 1485567042765
(1485567042765 - 1485307842765) / (24*60*60*1000.0)
-> 3.0