Python 日期时间增量 - 15 分钟?

Python Datetime Delta - 15 minutes?

我正在使用 bottle 框架,我试图设置一个将在 15 分钟后过期的 cookie,但它没有用,我发现问题出在我设置的过期时间上。

我的问题是我无法让 datetime.timedelta() 将当前时间增加 15 分钟。仅当我提供 "days" 关键字参数并将其设置为 0 以外的值时它才有效。

即:

它是这样工作的:

expire_date = datetime.datetime.now()
expire_date = expire_date + datetime.timedelta(days=10, seconds=900)
response.set_cookie("MyCook", "CookieVal", expires=expire_date)

以下无效(未创建或更新 cookie):

expire_date = datetime.datetime.now()
expire_date = expire_date + datetime.timedelta(days=0, seconds=900)
response.set_cookie("MyCook", "CookieVal", expires=expire_date)

expire_date = datetime.datetime.now()
expire_date = expire_date + datetime.timedelta(seconds=900)
response.set_cookie("MyCook", "CookieVal", expires=expire_date)

我阅读了文档,但不清楚具体是如何工作的。

https://docs.python.org/2/library/datetime.html#datetime.timedelta

有人可以帮我解决这个问题吗?提前致谢。

你住在格林威治以西吗?

bottle 中的 set_cookie 函数需要 UTC 日期时间对象将它们转换为字符串,因此您的时区未被考虑在内:

https://github.com/bottlepy/bottle/blob/master/bottle.py#L1729

value = value.timetuple()
....
value = time.strftime("%a, %d %b %Y %H:%M:%S GMT", value)

换句话说,如果您将到期日设置为 11:00am,那将是格林威治标准时间上午 11 点。例如,在哥斯达黎加 3:00am。

将到期日期增加一天或多天(甚至几个小时)可以解决您的问题,因为 expire_date 值变得大于当前 GMT 时间。

解决此问题的正确方法是使用当前 GMT 时间而不是您当地的当前时间:

expire_date = datetime.datetime.utcnow()