7

これが私がやろうとしていることです: ユーザーは太平洋で時間を送信し、送信したら .replace を使用してタイムゾーンを太平洋に設定します。

Pacific = time.USTimeZone(-8, "Pacific",  "PST", "PDT")
addEvent.date = addEvent.date.replace(tzinfo=Pacific)

tzinfo を設定したら、put を実行します。google appengine の python ドキュメントによると、次のように書かれています。

「datetime 値に tzinfo 属性がある場合、保存のために UTC タイム ゾーンに変換されます。値はデータストアから UTC として返され、tzinfo は None になります。日付と時刻の値が特定の時間にある必要があるアプリケーションタイム ゾーンは、値を更新するときに tzinfo を正しく設定し、値にアクセスするときに値をタイム ゾーンに変換する必要があります。」

ただし、put() を実行すると、次のエラーが発生します。

WARNING 2012-10-06 21:10:14,579 tasklets.py:399] 初期ジェネレーター _put_tasklet(context.py:264) で NotImplementedError が発生しました (DatetimeProperty の日付は UTC のみをサポートしています。別のタイムゾーンをサポートする新しいプロパティを派生させてください。) WARNING 2012 -10-06 21:10:14,579 tasklets.py:399] 中断されたジェネレーター put(context.py:703) が発生した NotImplementedError (DatetimeProperty 日付は UTC のみをサポートします。別のタイムゾーンをサポートする新しいプロパティを派生させてください。)

私はNDBを使用していることに注意してください

わかりましたので、それを行った後、おそらく NDB は自動的に UTC に変換しないと思いました。そこで、次のコードを使用して UTC に変換しようとしました。

class UTC(tzinfo):
  def utcoffset(self, dt):
    return timedelta(0)
  def tzname(self, dt):
    return str("UTC")
  def dst(self, dt):
    return timedelta(0)

太平洋時間をUTCに変換し、tzinfo名を「UTC」に設定した後でも、同じエラーが発生します。

ここで本当にたくさんの助けを借りることができました...ありがとう!

4

3 に答える 3

15

tzinfo解決策は、UTC に変換した後の時刻から を完全に削除することです。

timestamp = timestamp.replace(tzinfo=None)
于 2012-10-07T00:25:33.367 に答える