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

时间:2015-10-01 11:17:13

标签: python datetime cookies bottle timedelta

我正在使用瓶子框架,我试图设置一个将在15分钟后过期的cookie,但它从未起作用,我发现问题在于我设置的过期时间。

我的问题是我无法让$violations = $this->get('validator')->validate($entity); 在当前时间增加15分钟。仅当我提供“days”关键字参数并将其设置为0以外的值时,它才有效。

即:

它以这种方式工作:

datetime.timedelta()

以下操作不起作用(cookie未创建也未更新):

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

OR

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

我阅读了文档,但目前还不清楚这是如何运作的。

http://localhost/myfoldername/application/views/shout.php

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

1 个答案:

答案 0 :(得分:2)

你住在格林威治以西吗?

来自瓶子的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:00设定到期日,那将是格林尼治标准时间上午11点。例如,哥斯达黎加凌晨3点。

在过期日期中添加一天或多天(甚至几小时)可以解决您的问题,因为expire_date值会大于当前的GMT时间。

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

expire_date = datetime.datetime.utcnow()