I have implemented a system of callbacks. I want to display the time in unix epoch when I call the function.
For example:
from datetime import datetime def my_callback(): print(datetime.now().timestamp()) print(datetime.now())
In game:
First call: 1614270080.0 2021-02-25 19:22:14.304776 Second call after a second: 1614270080.0 2021-02-25 19:22:15.498516 Last call after a 2 seconds: 1614270080.0 2021-02-25 19:22:17.701154
Why datetime.now().timestamp()
return same time? The same problem with time.time()
I use Python 3.8 x32
Advertisement
Answer
The type of a timestamp
is float
, which is a floating point type of the width of the Python build. A 32-bit float is not sufficient to express the timestamp with second precision:
>>> import struct >>> def as_f32(num: float): return struct.unpack('f', struct.pack('f', num))[0] >>> def as_f64(num: float): return struct.unpack('d', struct.pack('d', num))[0] >>> # 32-bit expressible timestamps in a 10 second range >>> set(map(as_f32, range(1614270075, 1614270085))) {1614270080.0} >>> # 64-bit expressible timestamps in a 10 second range >>> set(map(as_f64, range(1614270075, 1614270085))) {1614270075.0, 1614270076.0, 1614270077.0, 1614270078.0, 1614270079.0, 1614270080.0, 1614270081.0, 1614270082.0, 1614270083.0, 1614270084.0}
Use a 64-bit build if the full precision is needed.