簡體   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