繁体   English   中英

获取文件的纪元时间戳,转换为日期时间,字符串,然后以微秒精度转换为相同的纪元浮点数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM