2

シドニーのユーザー向けに実行されている Plone インスタンスを持っているので、TZ 環境変数は に設定されていAustralia/Sydneyます。このセットでは、DateTimeZope2 のモジュールを使用するコードは間違ったタイムゾーンを表示する結果を生成します。例えば:

>>> 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のヘッダーを値に設定するため、かなり問題があります(MailHost.py の 466 行目)。オフセットが間違っているため、Date ヘッダーの時刻は 12 時間先になっています。その電子メールを受信した SMTP サーバーは、多くの場合、即座に拒否します!Date:DateTime().rfc822()

同じインスタンス内の他のコードは、すべて libc の関数datetimeに基づいている Pythonのモジュールを使用しているため、その TZ 変数で正しく動作しています。time.h

では、Plone の MailHost をオーストラリアのタイムゾーンで動作させるにはどうすればよいのでしょうか?

4

1 に答える 1

2

残念ながら、次のようにTZ=Australia/Sydneyなりtime.tzname == ('EST', 'EST')ます。

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

そして、DateTime 内部データベースはそれを に変換しUS/Easternます。これは、東部標準時が複数のタイムゾーンの名前であることの不幸な副作用です.

TZ誤って解釈されない新しいタイムゾーン名を使用して、オフセットと DST スイッチの日付を指定するより明示的な変数を指定する必要があります。

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

上記の値は、まだ未解決のバグ レポートから得られたものであり、たまたまあなたの目的にぴったりです。

$ 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
于 2012-09-20T13:05:32.560 に答える