5

ではmongodb、 というフィールドが次のjoining_dateように表示されます。

"Sun Dec 19 2010 05:35:55 GMT+0000 (UTC)"

ご覧のとおり、これは UTC 日付です。

しかし、pymongo からアクセスしたときの同じフィールドは次のように表示されます。

 datetime.datetime(2010, 12, 19, 5, 35, 55, 286000)

Pythonから、日付がutc形式かどうかを確認する必要があります。

問題: 以下に示すような奇妙な結果が得られます

v = datetime(2010, 12, 19, 5, 35, 55, 286000)
v.tzinfo == pytz.utc # Returns False !..why ?

Sun Dec 19 2010 05:35:55 GMT+0000 (UTC)から元の文字列を取得するにはどうすればよいですか、または UTC 形式かdatetime.datetime(2010, 12, 19, 5, 35, 55, 286000)どうかを確認するにはどうすればよいですか?datetime.datetime(2010, 12, 19, 5, 35, 55, 286000)

4

2 に答える 2

11

datetimepymongo によって返されるオブジェクトは、MongoDB に格納されている日付が常に UTC として格納されている (つまり、UTC であると想定されている) ように、常に UTC で時刻を表します。

.pymongo を作成するときにフラグをにdatetime設定すると、 . その後、sメソッドを使用して、必要に応じて別のタイム ゾーンに変換できます。tz_infoTrueConnectiondatetimeastimezone()

于 2011-08-13T00:48:39.890 に答える
1

PyMongo のドキュメントを引用するには:

サーバーから取得されたすべての日時は (使用しているドライバーのバージョンに関係なく) 単純で、UTC を表します。

すなわちv.tzinfo is None。それらを別のタイムゾーンに変換しようとすると、これについて警告されます。

>>> v.astimezone(pytz.timezone("US/Eastern"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: astimezone() cannot be applied to a naive datetime

ただし、 を実行することで、タイムゾーン対応の日時を取得できますdatetime(v.year, v.month, v.day, v.hour, v.minute, v.second, v.microsecond, pytz.utc)。この場合、元のコードは次のように機能します。

v = datetime(2010, 12, 19, 5, 35, 55, 286000, pytz.utc)
v.tzinfo == pytz.utc # Returns True
于 2011-07-27T15:50:05.090 に答える