gpt4 book ai didi

python - 在 Python 中以二进制格式写入和读取日期时间

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:54 24 4
gpt4 key购买 nike

我想用 Python 将日期时间列表存储在二进制文件中。

编辑:“二进制”是指每种数据类型的最佳数字表示。这个的应用是保存由(unix-timestamp, latitude, longitude, elevation)组成的GPS轨迹点,所以整个结构是小端的“Long, float, float, float”,每个值四个字节。

注意:由于对 Unix 平台的任何影响,我不使用“unix-timestamp”,而只是作为表示日期时间值的明确方式。

目前,我正在像下面的代码那样做,但除了我仍在解决的一些时区困惑之外(我的时区是 -3),我相信转换为 int 并返回可能不是正确的方法,因为 datetimedatetime64 是 python/numpy 中的原生类型,如果我没记错的话。因此,datetime64 需要八个字节,而不是我用于(长)unix 时间戳的四个字节。

import datetime
import calendar
import struct

now = datetime.datetime.now()
print now

stamp = calendar.timegm(now.utctimetuple())
print stamp

binarydatetime = struct.pack('<L', stamp)
recoverstamp = struct.unpack('<L', binarydatetime)[0]
print recoverstamp

recovernow = datetime.datetime.fromtimestamp(recoverstamp)
print recovernow

所以主要问题是:“这是将原始日期时间转换为二进制并返回的 pythonic 方式吗?”

另外一个问题是:“如果这段代码中的所有内容都应该是天真的,为什么我会有时区偏移量?”

感谢阅读!

最佳答案

我找到了一种使用 Unix 时间戳并将其存储为整数的方法。这对我有用,因为我不需要亚秒级分辨率,但我认为长整数可以通过对代码进行一些修改来实现微秒级分辨率。

我原来的变化包括用 time.mktime 替换 calendar.timegm 以及用 timetuple 替换 utctimetuple >,让一切都保持朴素。

这个:

import datetime
import struct
import time

now = datetime.datetime.now()
print now

stamp = time.mktime(now.timetuple())
print stamp

recoverstamp = datetime.datetime.fromtimestamp(stamp)
print recoverstamp

binarydatetime = struct.pack('<L', stamp)
recoverbinstamp = struct.unpack('<L', binarydatetime)[0]
print recoverbinstamp

recovernow = datetime.datetime.fromtimestamp(recoverbinstamp)
print recovernow

返回这个:

2013-09-02 11:06:28.064000
1378130788.0
2013-09-02 11:06:28
1378130788
2013-09-02 11:06:28

据此,我可以轻松地将打包的 binarydatetime 写入文件,稍后再读回。

关于python - 在 Python 中以二进制格式写入和读取日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18516582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com