kuh*_*nza 15 python email rfc2822
我正在用Python编写一个基于Web的电子邮件客户端,并且出现了一个问题,即电子邮件的"Date"标题应该在发送时表示哪个时区.
RFC 2822在3.3节中指出:
日期和时间应该表达当地时间.
这对我来说似乎含糊不清; 问题是当地时间是谁?电子邮件服务器或发件人?当然,我会假设发件人(可以在任何时区,并且可以更改其帐户首选项).当我看到Python的email.utils.formatdate函数时出现了进一步的混乱,它似乎只提供两种选择:UTC或本地时间(服务器的).对我来说似乎没有任何指定备用时区的选项,或者我错过了什么?
使用time.mktime(senders_tz_aware_now_datetime.timetuple())UTC日期字符串中的结果将时间值传递给formatdate ,考虑到RFC上面提到的内容,这会感觉不对.
那么哪个时区应该是"Date",并且是否存在任何标准函数来创建适当的日期字符串?
如果您想遵守RFC,则传递localtime=True返回带有本地时间和正确时区的日期字符串(假设您已正确设置).
>>> email.utils.formatdate(localtime=True)
'Mon, 07 May 2012 12:09:16 -0700'
Run Code Online (Sandbox Code Playgroud)
如果没有localtime=True您获得表示UTC时间的日期字符串:
>>> email.utils.formatdate()
'Mon, 07 May 2012 19:08:55 -0000'
Run Code Online (Sandbox Code Playgroud)
-0000显然表示UTC,尽管RFC特别推荐使用+0000.不确定这是否是email.utils中的错误.
这是相关的python文档:
可选的localtime是一个标志,当为True时,解释timeval,并返回相对于本地时区而不是UTC的日期,正确考虑夏令时.默认值为False,表示使用UTC.
只需使用 UTC,您就会更开心。
这就是当规范使用“应该”这样的术语时所发生的情况。我认为这两者都应该被禁止出现在规范中,因为它们总是会产生不必要的复杂性。
使用 UTC 是完全有效的。
| 归档时间: |
|
| 查看次数: |
7940 次 |
| 最近记录: |