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

2024-03-28 13:42:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将python中的日期序列化为URL安全字符串。

我记得C++中,我只使用代表1月1日1970以来的秒数的整数(或类似的东西)。然后我可以将其转换为Base64 url安全字符串。C++日期被设计成能够容易地绕过这些整数。

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

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

我遗漏了什么吗?有没有一种“简单”的方法可以做到我看不到的?

谢谢!

编辑:

好吧,这就是我决定的。它是@bgporter在下面建议的一种变体。我的目标是将日期时间信息转换为url安全字符串,而不占用太多不必要的空间,因此我修改了代码,使来自“int”时间戳的字节直接被base64 url编码,而不是转换为数字字符串(不需要base64 url编码)。生成的时间戳大约有8个字符,如下所示:a7NaTw==

编码时间戳(url安全Base64字符串):

url_safe_timestamp = base64.urlsafe_b64encode(struct.pack('L', int(time.time())))

解码时间戳(日期对象):

decoded_timestamp = datetime.datetime.fromtimestamp(float(struct.unpack('L', base64.urlsafe_b64decode(url_safe_timestamp))[0]))

Tags: 对象字符串代码url编码datetime字节序列化