I am trying to get timestamps that are accurate down to the microsecond on Windows OS and macOS in Python 3.10+.
On Windows OS, I have noticed Python's built-in time.time()
(paired with datetime.fromtimestamp()
) and datetime.datetime.now()
seem to have a slower clock. They don't have enough resolution to differentiate microsecond-level events. The good news is time
functions like time.perf_counter()
and time.time_ns()
do seem to use a clock that is fast enough to measure microsecond-level events.
Sadly, I can't figure out how to get them into datetime
objects. How can I get the output of time.perf_counter()
or PEP 564's nanosecond resolution time functions into a datetime
object?
Note: I don't need nanosecond-level stuff, so it's okay to throw away out precision below 1-μs).
Current Solution
This is my current (hacky) solution, which actually works fine, but I am wondering if there's a cleaner way:
import time
from datetime import datetime, timedelta
from typing import Final
IMPORT_TIMESTAMP: Final[datetime] = datetime.now()
INITIAL_PERF_COUNTER: Final[float] = time.perf_counter()
def get_timestamp() -> datetime:
"""Get a high resolution timestamp with μs-level precision."""
dt_sec = time.perf_counter() - INITIAL_PERF_COUNTER
return IMPORT_TIMESTAMP + timedelta(seconds=dt_sec)
from datetime timestamp using Python with microsecond level accuracy
No comments:
Post a Comment