Я расширяю предыдущий комментарий и половину ответа, надеюсь, пригодный для использования ответ.
Насколько мне известно, он дает наиболее правильный и удобный формат даты cookie в одной быстрой функции - принятой любым,даже старые и нечетные браузеры - принимают абсолютное и относительное время:
import time
_weekdayname = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
_monthname = [None,
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
def cookie_date(epoch_seconds=None, future=0):
if not epoch_seconds:
epoch_seconds = time.time()
year, month, day, hh, mm, ss, wd, y, z = time.gmtime(epoch_seconds + future)
return "%s, %02d-%3s-%4d %02d:%02d:%02d GMT" % \
(_weekdayname[wd], day, _monthname[month], year, hh, mm, ss)
Функция эволюционировала из Cookie._getdate()
/ http.cookies._getdate()
, которая производит пробелы вместо удобных -
's (хорошо согласно RFC, но не распознается всеми браузерами).Эта функция допускает только относительную синхронизацию и является недокументированной функцией.Однако он также может быть использован недокументированной функцией, что вы можете дать целые секунды (но не с плавающей точкой!) Для поля expires в SimpleCookie
кусочках, которые затем интерпретируются относительно секунд в будущее / прошлое:
cookie_morsel['expires'] = +3600 # 1h into future; 3600.0 doesn't work!
Часто используемый time.strftime("%a, %d %b %Y %T GMT", t_expires)
сомнителен, поскольку он зависит от настроек локали (% a,% d) и спецификации недокументированного формата для конкретной ОС (например,% T не понимается в Windows).