[英]Get File's Epoch timestamp, convert to DateTime, to string, and then to the identical epoch float with microsecond precision
我想获取一个文件的纪元时间戳浮点数(例如,来自"os.stat(__file__).st_mtime"
的 "1661796943.8816772" ),并将该浮点数转换为我认为所谓的 DateTime 字符串,然后将该 DateTime 字符串转换回float 与我开始使用的 float 相同,即来自"os.stat(__file__).st_mtime"
。
我认为我的 DateTime 字符串具有我想要的精度(例如,“2022,08,29,11,15,43,881677”),并且我能够将其转换为 DateTime object:
print(my_DateTime_obj)
>>2022-08-29 11:15:43.881677
但是我发现将 DateTime object 转换为 Epoch 浮点数的例程缺乏我原来的浮点数(“1661796943.8816772”)具有的很多精度:
print(time.mktime(DateTime_obj.timetuple()))
>>1661796943.0
我认为 timetuple() 是问题所在,但我无法弄清楚。 任何关于如何将 DateTime object 转换为 Epoch 浮点数的提示,而不会失去我认为的微秒精度,将不胜感激。
我承认我距离理解 mktime()、timetuple() 以及“结构化时间”的真正含义还有很长的路要走。
使用日期时间模块:
import os
from datetime import datetime, timezone
import numpy as np
# file modification time, seconds since Unix epoch
unix0 = os.stat(__file__).st_mtime
# to datetime object
dt = datetime.fromtimestamp(unix0, tz=timezone.utc)
print(dt.isoformat(timespec="microseconds"))
# e.g.
# 2022-08-30T08:31:32.117021+00:00
# datetime object back to Unix time
unix1 = dt.timestamp()
# assert equal with microsecond precision
assert np.isclose(unix0, unix1, atol=1e-6)
注意:如果您不设置tz=timezone.utc
,则日期时间 object 将是幼稚的(与时区感知相反)并且类似于本地时间。 尽管如此,转换仍能正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.