我正在尝试将时间戳(我不知道它是如何转换)转换为日期时间。
我有这样的输入: 1217099350.0
如果我把它写在Libreoffice (1217099350.0/86400) + 29226上,并将单元格格式化到日期。我有一个正确的输出:
31/07/2018 19:09:10但如果我在蟒蛇上做这个:
tt = 1217099350.0
tt2 = (tt / 86400.) + 29226.
tt3 = datetime.fromtimestamp(tt2).strftime("%Y-%M-%d %H:%m:%S"
print(tt3)我有下一个输出:
1970-01-01 : 09:01:52
我的代码有什么问题?
谢谢!致以问候!
发布于 2018-08-02 18:42:36
伊曼纽尔
更改Python中的Epoch可能是一项很大的工作。在调用LibreOffice之前,对您的datetime.utfromtimestamp时间戳进行一些计算以将它们转换为Posix时间戳可能会更容易一些。
但是,如果你在1970年1月1日前使用时间戳,这是行不通的。
from datetime import datetime
tt = 1217099350.0
tt2 = (tt / 86400.) + 29226.
# At this point tt2 has days since the LibreOffice Epoch. Below, it
# is converted to seconds since Posix epoch.
tt3 = tt2 - 25569. # There are 25569 days between LibreOffice and Posix epoch
tt4 = tt3 * 86400. # Convert timestamp from days to seconds
tt5 = datetime.utcfromtimestamp(tt4).strftime("%Y-%m-%d %H:%M:%S")
print(tt5)
2018-07-31 19:09:10发布于 2018-08-02 18:21:30
看来,LibreOffice时代与Posix时代不一样。我发现这篇文章可能会有帮助。
https://syslog.me/2012/08/28/dates-from-unix-timestamps-in-openoffice-libreoffice/
Posix时代是1970年1月1日午夜,世界协调时。
>>> datetime.utcfromtimestamp(0).strftime("%Y-%m-%d %H:%M:%S")
'1970-01-01 00:00:00'LibreOffice时代是1899年12月30日。
除以86400表示您正在尝试将秒转换为天。但是,Python中的datetime.fromtimestamp函数期望在秒内有一个时间戳。
另外,在你的电话中,你倒转了几个月和几分钟。%M表示分钟,%m表示月份。
最后,为了避免时区问题,您可能需要使用use时间戳而不是zone时间戳。
https://stackoverflow.com/questions/51659683
复制相似问题