我想在Python中将一系列日期时间存储在二进制文件中。
编辑:所谓“二进制”是指每种数据类型的最佳数字表示法。这个应用场景是保存由(unix-timestamp,纬度,经度,海拔)组成的GPS轨迹点,因此整个结构是小端字节序的“长整型,浮点数,浮点数,浮点数”,每个值占四个字节。
注意:我使用“unix-timestamp”并不是因为有任何对Unix平台的喜好,而仅仅是作为表示日期时间值的明确方式。
目前,我正在像下面的代码一样处理,但除了一些时区混淆问题(我的时区是-3),我认为将其转换为
所以主要问题是:“这是将naive datetime转换为二进制并恢复的pythonic方法吗?”
另一个问题是:“如果代码中所有内容都应该是naive,为什么我有一个时区偏移量?”
谢谢阅读!
编辑:所谓“二进制”是指每种数据类型的最佳数字表示法。这个应用场景是保存由(unix-timestamp,纬度,经度,海拔)组成的GPS轨迹点,因此整个结构是小端字节序的“长整型,浮点数,浮点数,浮点数”,每个值占四个字节。
注意:我使用“unix-timestamp”并不是因为有任何对Unix平台的喜好,而仅仅是作为表示日期时间值的明确方式。
目前,我正在像下面的代码一样处理,但除了一些时区混淆问题(我的时区是-3),我认为将其转换为
int
再转回去可能不是正确的方法,因为在python/numpy中,datetime
和datetime64
是原生类型,如果我没有弄错的话。因此,一个datetime64
需要八个字节而不是我使用的四个字节(long)unix-timestamp。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
所以主要问题是:“这是将naive datetime转换为二进制并恢复的pythonic方法吗?”
另一个问题是:“如果代码中所有内容都应该是naive,为什么我有一个时区偏移量?”
谢谢阅读!