15

私は Python で Web ベースの電子メール クライアントを作成していますが、送信時に電子メールの「日付」ヘッダーをどのタイム ゾーンで表す必要があるかについて質問があります。

RFC 2822は、セクション 3.3 で次のように述べています。

日付と時刻は、現地時間を表現する必要があります。

これは私にはあいまいに思えます。問題は、誰の現地時間ですか? メールサーバー、または送信者?当然のことながら、私は送信者を想定します (送信者は任意のタイム ゾーンにいる可能性があり、アカウントの設定で変更できます)。Python のemail.utils.formatdate関数を調べたところ、さらに混乱が生じました。この関数は、UTC または (サーバーの) ローカル時間の 2 つの選択肢しか提供していないようです。私には、別のタイムゾーンを指定するオプションがないように見えますか、それとも何か不足していますか?

formatdate を使用して timeval を渡すtime.mktime(senders_tz_aware_now_datetime.timetuple())と、UTC 日付文字列が生成されます。これは、RFC が上記で述べていることを考えると、間違っていると感じます。

では、「日付」はどのタイムゾーンであるべきで、適切な日付文字列を作成するための標準関数はありますか?

4

3 に答える 3

9

RFC に準拠したい場合はlocaltime=True、ローカル時間と適切なタイム ゾーンを含む日付文字列を返す を渡します (正しく設定されている場合)。

>>> email.utils.formatdate(localtime=True)
'Mon, 07 May 2012 12:09:16 -0700'

localtime=TrueUTC 時間を表す日付文字列を取得しない場合:

>>> email.utils.formatdate()
'Mon, 07 May 2012 19:08:55 -0000'

-0000は明らかに UTC を示していますが、RFC では を使用することを特に推奨してい+0000ます。これが email.utils のバグかどうかはわかりません。

関連する python ドキュメントは次のとおりです。

オプションの localtime は、True の場合、timeval を解釈し、夏時間を適切に考慮して、UTC ではなくローカル タイムゾーンに相対的な日付を返すフラグです。デフォルトは False で、UTC が使用されることを意味します。

于 2012-05-07T19:11:26.413 に答える
3

UTC を使用するだけで、より快適になります。

それが、仕様が SHOULD のような用語を使用しているときに起こっていることです。どちらも常に不必要な複雑さを生み出しているため、仕様から禁止する必要があると思います。

UTC の使用は完全に有効です。

于 2012-05-07T18:46:35.873 に答える