datetime
и особенно класс datetime.datetime
.
datetime.datetime.now().microsecond // 1000
. Микросекунды (до долей секунды) хранятся в атрибуте microsecond
.
timeit
или perf_counter_ns
из модуля time
, так как datetime
обеспечивает точность только до микросекунд.
import datetime
import time
now = datetime.datetime.now()
print(f"Дата и время: {now}")
print(f"Микросекунды: {now.microsecond}")
nanoseconds = time.perf_counter_ns()
print(f"Наносекунды: {nanoseconds}")
Для работы с датами и временем в Python, особенно когда требуется точность до миллисекунд и наносекунд, обычно используют модуль datetime
, а также, при необходимости, сторонние библиотеки, такие как arrow
или pendulum
, которые предоставляют более удобный API.
Использование модуля datetime
:
Основной класс: datetime.datetime
- представляет собой комбинацию даты и времени.
Создание объекта datetime
:
import datetime
# Получение текущей даты и времени с микросекундами
now = datetime.datetime.now()
print(now)
# Создание объекта datetime с указанием миллисекунд (они становятся микросекундами)
dt = datetime.datetime(2024, 10, 27, 12, 30, 45, 500000) # 500000 микросекунд = 500 миллисекунд
print(dt)
Работа с микросекундами:
# Доступ к микросекундам
microseconds = now.microsecond
print(microseconds)
Форматирование: Используйте strftime
для форматирования объекта datetime
в строку.
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S.%f") # %f - микросекунды
print(formatted_date)
Парсинг: Используйте strptime
для преобразования строки в объект datetime
.
date_string = "2024-10-27 15:45:30.123456"
parsed_date = datetime.datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S.%f")
print(parsed_date)
Представление timestamp:
timestamp_seconds = now.timestamp() # Возвращает float timestamp в секундах
print(timestamp_seconds)
from datetime import datetime
# создать datetime объект из timestamp (секунды)
dt_object = datetime.fromtimestamp(timestamp_seconds)
print("datetime from timestamp:", dt_object)
Работа с наносекундами:
К сожалению, встроенный модуль datetime
в Python не поддерживает наносекунды напрямую. Значение микросекунд является максимальной точностью, которую он может предоставить. Для работы с наносекундами необходимо использовать другие подходы:
Использовать целочисленное представление: Храните дату и время как целое число, представляющее наносекунды, прошедшие с определенной эпохи (например, Unix Epoch). При необходимости можно конвертировать это значение в более удобочитаемые форматы.
import time
# Получение времени в наносекундах (не гарантируется абсолютная точность)
nanoseconds = time.time_ns()
print(nanoseconds)
Использование внешних библиотек (только для конвертации, не для хранения): Некоторые библиотеки могут предоставлять способы преобразования времени в строковое представление с наносекундами, хотя и не хранят само значение наносекунд.
Обработка в базе данных: Если данные хранятся в базе данных, рассмотрите возможность использования типов данных, поддерживающих наносекундную точность (например, TIMESTAMP WITH NANOSECONDS в PostgreSQL). Обработку данных в этом случае нужно будет выполнять непосредственно в базе данных.
NumPy: Библиотека NumPy позволяет работать с массивами данных, включая массивы datetime64, которые могут обеспечить более высокую точность (хотя и не всегда наносекунды буквально):
import numpy as np
# Создание массива datetime64 с наносекундной точностью
date_time_arr = np.array(['2024-10-27T12:00:00.000000000'], dtype='datetime64[ns]')
print(date_time_arr)
# Доступ к значению
print(date_time_arr[0])
Пример использования NumPy datetime64:
import datetime
import numpy as np
# Получение текущего времени в виде datetime64[ns]
now_ns = np.datetime64(datetime.datetime.now())
# Вывод
print(now_ns)
# Преобразование обратно в datetime (теряет точность до наносекунд)
now_dt = now_ns.astype('datetime64[us]').astype('datetime.datetime')
print(now_dt)
Важно: Следует понимать, что точность системных часов часто ограничена, и получение реальных наносекундных значений может быть затруднено. Метод time.time_ns()
предоставляет значение времени в наносекундах, но его точность зависит от операционной системы и аппаратного обеспечения.