在Python中将日期序列化为url安全字符串

Chr*_*row 2 python string serialization datetime date

我想将python中的Date序列化为URL安全字符串.

我记得在C++中,我常常只取整数表示自1970年1月1日以来的秒数(或类似的东西).然后我可以把它变成一个Base64 url​​-safe字符串.C++日期旨在能够轻松地传递这些整数.

理想情况下,在Python中,我想获得一个表示日期的字节数组,然后将其传递给base64.urlsafe_b64encode().然后当我想反序列化时,我可以对字节进行解码并将其传递回datetime对象.我不知道如何在Python中这样做.

我相信我可以使用datetime.isoformat(),但由此产生的字符串似乎不必要地长,我不需要它是人类可读的.我也可以编写自定义函数来进行翻译,但如果可能的话我想使用官方库代码.

我错过了什么吗?有没有一种"简单"的方法可以做到这一点,我没有看到?

谢谢!

编辑:

好吧,这就是我所确定的.它是@bgporter在下面建议的变体.我的目标是将日期时间信息转换为url-safe字符串,而不占用太多不必要的空间,因此我修改了代码,使得"int"时间戳中的字节直接是base64 url​​编码而不是转换为字符串数字(不需要是base64 url​​编码).生成的时间戳大约为8个字符,如下所示a7NaTw==:

编码时间戳(url-safe Base64字符串):

url_safe_timestamp = base64.urlsafe_b64encode(struct.pack('L', int(time.time())))
Run Code Online (Sandbox Code Playgroud)

解码时间戳(Date对象):

decoded_timestamp = datetime.datetime.fromtimestamp(float(struct.unpack('L', base64.urlsafe_b64decode(url_safe_timestamp))[0]))
Run Code Online (Sandbox Code Playgroud)

bgp*_*ter 9

你的意思是这样的:

>>> import base64
>>> import time
>>> encoded = base64.urlsafe_b64encode("%d" % int(time.time()))
>>> print encoded
'MTMzMTMyOTE5NA=='
>>> decoded = int(base64.urlsafe_b64decode(encoded))
>>> print decoded
1331329194
>>> import datetime
>>> datetime.datetime.fromtimestamp(decoded)   
datetime.datetime(2012, 3, 9, 16, 39, 54)
Run Code Online (Sandbox Code Playgroud)

(我不确定为什么这里的64位编码比使用十六进制值更好 - 我缺少什么?)