【发布时间】:2013-09-02 05:16:16
【问题描述】:
我想将日期时间列表存储在 Python 中的二进制文件中。
编辑:“二进制”是指每种数据类型的最佳数字表示。其应用是保存由(unix-timestamp, latitude, longitude, elevation)组成的GPS轨迹点,所以整个结构是little-endian“Long,float,float,float”,每个值有四个字节。
注意:由于对 Unix 平台有任何影响,我不使用“unix-timestamp”,而只是作为表示日期时间值的明确方式。
目前,我正在像下面的代码那样做,但除了一些我仍在解决的时区混淆(我的时区是-3)之外,我相信转换为 int 并返回可能不是正确的方法,因为datetime 和 datetime64 是 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 时代。
-
@MartijnPieters 我希望以独立于语言和平台的方式将数据类型写入文件。查看我的编辑!
-
将 sqlite 数据库视为一种可移植的二进制格式,以使用其原生 datetime 类型存储 gps 轨迹点作为 UTC(或 gps)时间。
-
这个问题你解决了吗? (从字节“读取”时间戳)。我也有。
-
@garrythehotdog 在下面看到我自己的答案
标签: python datetime binary timestamp unpack