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

Я пытаюсь сделать что-то действительно простое, конвертировать объект datetime трех дней в будущее в метку времени UTC Unix:

 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 с фактической точностью в миллисекундах? Если он возвращается как float, и я должен сгладить его до int , это нормально. Есть ли решение, которое я ищу, что делает это?

  • Использование beautifulsoup для извлечения текста между разрывами строк (например, теги <br />)
  • Метка точек данных питона на графике
  • Как запустить Scrapy из сценария Python
  • Панды: округление индекса времени до ближайшей 5-й минуты
  • Каков самый чистый способ остановить работу многопроцессора python, подключенного к очереди в бесконечном цикле?
  • map :: lower_bound () эквивалент для класса dict для python?
  • rpy2 не может импортировать пакет «rgl» R
  • склеарная стратифицированная выборка на основе столбца
  • 6 Solutions collect form web for “datetime до метки времени Unix с точностью до миллисекунды”

    Объекты Datetime имеют поле с именем microsecond . Таким образом, один из способов добиться того, что вам нужно:

     time.mktime(then.timetuple())*1e3 + then.microsecond/1e3 

    Это возвращает миллисекунды с эпохи UNIX с требуемой точностью.

    В Python 3.3 и выше, которые поддерживают метод datetime.timestamp() , вы можете сделать это:

     from datetime import datetime, timezone, timedelta (datetime.now(timezone.utc) + timedelta(days=3)).timestamp() * 1e3 
     long((time.time() + 0.5) * 1000) 

    это имеет миллисекундную точность

    86400 время POSIX день всегда 86400 секунд. Чтобы получить временную метку POSIX через 3 дня в будущем как поплавок (с долей секунды):

     import time DAY = 86400 # seconds future = time.time() + 3 * DAY 

    Предполагается, что time.gmtime(0) – 1970 (эпоха POSIX).

    Если у вас уже есть объект наивного datetime, который представляет время в локальном часовом поясе, метка времени может быть неоднозначной во время переходов DST. Чтобы избежать двусмысленности, вы можете использовать объект datetime, относящийся к часовому поясу, или наивный объект datetime, который представляет время в формате UTC.

    Чтобы преобразовать локальное datetime dt в секундах с момента Epoch:

     from datetime import datetime from time import mktime timestamp = dt.timestamp() # Python 3.3+ timestamp = mktime(dt.timetuple()) + dt.microsecond / 1e6 # Python 2.7 

    Он может потерпеть неудачу, если в прошлом в локальном часовом поясе имелось другое смещение utc и реализация time не имеет доступа к базе данных часовых поясов в системе. Используйте pytz для обработки таких случаев.

    Чтобы преобразовать UTC datetime utc_dt в метку времени POSIX:

     timestamp = (utc_dt - datetime(1970, 1, 1)).total_seconds() 

    Чтобы получить миллисекунды, просто умножьте любое число с плавающей точкой секунд на 1e3.

    Если вы используете Python 2.7 или 3.2+, вы можете использовать timedelta.total_seconds() чтобы получить это довольно легко:

     import datetime, time print time.time() + datetime.timedelta(days=3).total_seconds() 

    Если придерживаться datetimes в 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 
    Interesting Posts

    Правильное размещение цветной панели относительно геоосевых (картографических)

    Невозможно загрузить файлы с использованием рассольных и многокомпонентных модулей

    Как удалить дублированные строки с помощью pandas в большом файле данных?

    Создание списка в Python – что-то подлый?

    Как получить только последнюю часть пути в Python?

    Почему python mock patch не работает?

    Использовать хранилище данных Google AppEngine вне проекта AppEngine

    Как заставить PyLint распознавать члены numpy?

    Tried Python BeautifulSoup и Phantom JS: STILL не может очищать веб-сайты

    Книги для OpenCV и Python?

    Как прокомментировать элемент XML (с использованием реализации мини-DOM)

    Регулировка экспозиции (яркость / контрастность) на основе гистограммы с использованием Python

    Создание квадратных подсетей (одинаковой высоты и ширины) в matplotlib

    Сложность len () в отношении наборов и списков

    Получить идентификатор группы обратно в базу данных pandas

    Python - лучший язык программирования в мире.