2011-10-04 32 views
23

私はpyMongoクライアントでISODateオブジェクトを作成する方法を見つけようとしていますが、今まで成功していません。pyMongoでISODateを作成する

私はhttp://pypi.python.org/pypi/pymongo3クライアントを使用していますが、これは現在Python 3で利用可能な唯一の重大なものですが、この特定のpymongoバージョンでは問題が発生していないようです。

pymongoクライアントからこのMongoDBオブジェクトタイプを使用する解決策が見つかったのかどうか知りたいのですが...助けてくれてありがとう!

+0

"now"以外の日付を変換する必要がある場合は、utc値を取得する前に、datetimeにタイムゾーン情報を追加することもできます。 – kommradHomer

答えて

51

datetime.datetimeのインスタンスを保存するだけで済みます。

>>> c.test.test.insert({'date': datetime.datetime.utcnow()}) 
ObjectId('4e8b388367d5bd2de0000000') 
>>> c.test.test.find_one() 
{u'date': datetime.datetime(2011, 10, 4, 16, 46, 59, 786000), u'_id': ObjectId('4e8b388367d5bd2de0000000')} 

のmongoシェルでの問い合わせ:

> db.test.findOne() 
{ 
    "_id" : ObjectId("4e8b388367d5bd2de0000000"), 
    "date" : ISODate("2011-10-04T16:46:59.786Z") 
} 
+0

動作していないように見えます。 "timestamp": "Wed Oct 05 2011 09:56:02 GMT + 0200(CET)"、 –

+0

MongoDBのどのバージョンをお使いですか? –

+3

また、ISODateはBSONタイプではありません。それは、BSON Datetimeがシェルで表現される方法です。 PyMongoでは、datetime.datetimeのインスタンスとして表されます。 http://bsonspec.org/#/specification –

13

人のためのタイムスタンプからISODateを作成する方法を不思議に思っている:

ts = time.time() 
isodate = datetime.datetime.fromtimestamp(ts, None) 

これをPythonシェルから挿入

タイムゾーンのないdatetimeオブジェクトを作成します。 MongoDBに挿入すると、適切なISODate()に変換されます。

また、Python TimeTransitionsImageをご覧になることを強くおすすめします。ここでtupleという名前のタプル(Cの構造体に相当)です。また、tupleフィールドは、名前が同じであっても(たとえば、tm_wdayは月曜日から始まり日曜日ではなくても)、Cのカウンターパートと同じではないことにも注意してください。

+4

'fromtimestamp()'サーバーのローカルタイムゾーンで時刻を表す素朴なdatetimeオブジェクトを作成します。ほとんどの場合、それはあなたが望むものではありません。代わりに 'datetime.utcfromtimestamp(ts)'を使うべきです。 – jfs

0
result = db.objects.insert_one(
    {"last_modified": datetime.datetime.utcnow()}) 

ここで、utcは普遍的な時間座標を表します。

+1

ようこそスタックオーバーフロー。コードが何をしているのかの説明を追加することで、これをより良い答えにすることができます –

関連する問題