gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:09:54 26 4
gpt4 key购买 nike

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

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

理想情况下,在 Python 中,我想获得一个表示日期的字节数组,然后将其传递给 base64.urlsafe_b64encode()。然后,当我想反序列化时,我可以对字节进行反编码并将其传回日期时间对象。不过,我不知道如何在 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]))

最佳答案

你的意思是这样的:

>>> 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)

?

(我不确定为什么这里的 base 64 编码比仅使用十六进制值更好——我错过了什么?)

关于python - 在 Python 中将日期序列化为 url 安全字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9641313/

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