timezone - Plone MailHost 发送带有澳大利亚时区的错误日期 header

标签 timezone plone zope

我有一个正在为悉尼用户运行的 Plone 实例,因此 TZ 环境变量设置为 Australia/Sydney。通过此设置,使用 Zope2 中的 DateTime 模块的代码会生成显示错误时区的结果。例如:

>>> import time
>>> import DateTime
>>> print time.strftime("%a, %d %b %Y %T %z") # 
Thu, 20 Sep 2012 02:38:08 +1000
>>> print DateTime.DateTime().rfc822()
Thu, 20 Sep 2012 02:38:08 -0400

这是相当有问题的,因为 Products.MailHost 将传出电子邮件上的 Date: header 设置为值 DateTime().rfc822() (位于 MailHost.py 的第 466 行)。由于偏移量错误,Date header 中的时间现在是 future 12 小时后的时间。接收该电子邮件的 SMTP 服务器通常会立即拒绝它!

同一实例中的其他代码非常高兴地使用该 TZ 变量正确运行,因为它使用 Python 中的 datetime 模块,该模块全部基于 libc 的 time.h功能。

那么,为了让 Plone 的 MailHost 在澳大利亚时区工作,人们该怎么做?

最佳答案

不幸的是,TZ=Australia/Sydney 变成 time.tzname == ('EST', 'EST'):

$ TZ=Australia/Sydney bin/zopepy -c "import time; print time.tzname"
('EST', 'EST')

DateTime 内部数据库将其转换为美国/东部。这是东部标准时间作为多个时区名称的一个不幸的副作用。

您需要指定一个更明确的 TZ 变量来指定偏移量和 DST 切换日期,并使用不会被误解的新时区名称:

TZ="AEST-10AEDT-11,M10.1.0/02:00:00,M4.1.0/03:00:00"

以上数值来自still open bug report并且恰好非常适合您的目的:

$ TZ="AEST-10AEDT-11,M10.1.0/02:00:00,M4.1.0/03:00:00" bin/zopepy
>>> import DateTime
>>> import sys
>>> m = sys.modules['DateTime.DateTime']
>>> m._findLocalTimeZoneName(0)
'GMT+10'
>>> m._findLocalTimeZoneName(1)
'GMT+11'
>>> import DateTime
>>> DateTime.DateTime()
DateTime('2012/09/21 00:12:0.765691 GMT+10')
>>> DateTime.DateTime().rfc822()
'Fri, 21 Sep 2012 00:12:04 +1000'

您可以通过在构建中指定 TZ 环境变量来将其添加到您的 Zope 配置中:

[instance]
recipe = plone.recipe.zope2instance
...
environment-vars =
    TZ AEST-10AEDT-11,M10.1.0/02:00:00,M4.1.0/03:00:00

关于timezone - Plone MailHost 发送带有澳大利亚时区的错误日期 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12499725/

相关文章:

javascript - 如何在开发者 Facebook 中配置设置?

python - 导入 pyodbc 时出错

datetime - 使用 NodaTime 将 UTC 日期时间字符串转换为 Zoned DateTime

node.js - 如何在 Node js 中为 windows 设置默认时区

django - 在 Django/PostgreSQL 中设置自定义时区(印度标准时间)

Plone:编辑 portlet 的名称

Java、Oracle db - trunc(nvl) 从日期时间对象中删除时间戳后出现时区问题

tinymce - 获取 Plone 5 上的 "default"模型 TinyMCE 配置

python - 为什么plone.api没有find?

python - python package namespaces : z3c, zc, collective 背后是什么?