ここでの最善の解決策は、おそらく、jQuery
コードを送信する前に日時を GMT に変換することです。(タイムゾーンも必要な場合は、個別に送信してください。)次に、Python側でJSON(または何でも)から取得し、 でGMTdatetime
オブジェクトに変換しstrptime
て使用できます。これで完了です。
しかし、コードの変更を最小限に抑えた最も簡単な解決策*は、jQuery に間違ったことをさせて、Python 側のタイムゾーンを破棄することです。基本的に、これの代わりに:
dt = datetime.datetime.strptime(jsondate)
これを行う:
dt = datetime.datetime.strptime(jsondate.partition('(')[0])
'('
スティルの後にすべてを捨てると、-0600
パーツが残ることに注意してください。「PST」または「山の夏時間」の部分が失われているだけです。
とにかく、それらの部分はあなたに何の役にも立ちませんでした。datetime
はこれらのタイムゾーン名を理解していません。そして、それがあったとしても、オフセット(すでに持っている)を除いて、それらをマップするものは何もありません。リアルタイムのタイムゾーンが必要な場合は、pytz
.**のようなサードパーティ ライブラリが必要です。
その上、認識オブジェクトではなく、strptime
明確にナイーブdatetime
オブジェクトを返します。したがって、タイムゾーンを解析して検索できたとしても、を解析し、タイムゾーンを取り出して個別に解析し、それを検索してから を呼び出さない限り、それらについてdatetime
は何も役に立ちません。datetime
astimezon
datetime
つまり、要約すると、この情報を捨てる最悪のシナリオは、まさにあなたがすでに持っているものです。
余談ですが、3 つのプロジェクトを続けて、日時シリアライザーを Python 側の JSON エン/デコーダー (および JS 側の一致するシリアライザー) に具体的にプッシュしました。 UTC 日時 (ISO8601 形式。これはコンピューターにとってエポック秒と同じくらい使いやすく、人間にとって読み取り/編集がはるかに簡単なためです) とタイムゾーン オフセットを今日渡しますが、もしそうなら tzinfo キーに切り替えます。後で重要だから。3 回とも、それが重要になることはありませんでした…そして、それが重要だったプロジェクトでは、通常、ICAL スケジュールやグレゴリオ暦前の日付、またはその他の同様の楽しいことについて回っていました。
最後に、私のキャリアの中であまりにも多くの日付関連のコードを書いてきた者として、私はこれを言わなければなりません: 世界を乗っ取ることを計画している邪悪な大君主を知っているなら、彼らがタイムゾーンを廃止すると約束するなら、私は喜んで彼らのコードを見落とします。人類を奴隷にしたり、子猫を赤ちゃんと戦わせたり、ヘンチマンとして登録したりする他のプログラム。
* ... 少なくとも私にとっては最も単純です。なぜなら、Python は JS や jQuery よりもはるかによく知っているからです。:)
** IIRC は、pytz
"Mountain Daylight Time" のような NT スタイルのタイムゾーン キーも処理できないため、実際にはそれを処理する別のライブラリが必要です。Microsoft の 3 つの類似した 1601 っぽいエポック時間 (2 つのまったく同じではないエポック、特別な「時間の終わり」の異なるルール) の違いを処理することを含め、あらゆる種類の MS 日時処理を行ったライブラリからそれを得たと思います。 " および "時間の開始" および "日付ではない" 値、…)。