datetime в метку времени Unix с точностью до миллисекунды

Я пытаюсь сделать что-то действительно простое, преобразовать объект 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 , это нормально. Есть ли решение, которое я ищу для этого?

30
задан Adam Zalcman 16 November 2011 в 23:51
поделиться

1 ответ

Если придерживаться 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
1
ответ дан 27 November 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: