2011-10-04 18 views
23

के साथ एक आईएसओडीएट बनाएं I pymongo क्लाइंट के साथ एक आईएसओडीएट ऑब्जेक्ट बनाने का कोई तरीका ढूंढने का प्रयास कर रहा है, लेकिन बिना किसी सफलता के।pyMongo

मैं http://pypi.python.org/pypi/pymongo3 क्लाइंट का उपयोग करता हूं, जो अब के लिए पाइथन 3 में उपलब्ध एकमात्र गंभीर है, लेकिन समस्या इस विशिष्ट पिमोंगो संस्करण से नहीं आती है।

मैं जानना चाहता हूं कि आप में से किसी को इस मोंगोडीबी ऑब्जेक्ट प्रकार को एक पिमोंगो क्लाइंट से उपयोग करने का समाधान मिला है ... आपकी मदद के लिए धन्यवाद!

+0

यदि आपको "अब" के अलावा किसी अन्य तारीख को रूपांतरित करने की आवश्यकता है, तो आप utc value – 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')} 

मोंगो खोल में पता कर रहा है:

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

प्राप्त करने से पहले, आपके डेटाटाइम में टाइमज़ोन जानकारी भी जोड़ना चाहेंगे, संग्रहीत डेटा एक स्ट्रिंग है। "टाइमस्टैंप": "बुध अक्टूबर 05 2011 09:56:02 जीएमटी + 0200 (सीईटी)", –

+0

आप मोंगोडीबी का किस संस्करण का उपयोग कर रहे हैं? –

+3

इसके अलावा, ISODate एक बीएसओएन प्रकार नहीं है। शैल में बीएसओएन डेटाटाइम का प्रतिनिधित्व करने का यही तरीका है। PyMongo में यह datetime.datetime के उदाहरण के रूप में दर्शाया गया है। http://bsonspec.org/#/specification –

13

उन लोगों के लिए जो टाइमस्टैम्प से ISODate बनाने का तरीका सोच रहे हैं:

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

यह कोई टाइमज़ोन वाला datetime ऑब्जेक्ट बनाएगा। जब मोंगोडीबी में डाला जाता है तो इसे उचित ISODate() में परिवर्तित कर दिया जाएगा।

इसके अलावा, मैं दृढ़ता से Python TimeTransitionsImage को देखने की अनुशंसा करता हूं। ध्यान दें कि tuple यहां नामित tuple (सी में संरचना के बराबर) है। और यह भी ध्यान रखें कि ट्यूपल फ़ील्ड सी समकक्षों के समान नहीं हैं, भले ही नामकरण समान है (उदाहरण के लिए, tm_wday सोमवार के साथ शुरू होता है और रविवार नहीं)।

+4

'fromtimestamp() 'एक बेवकूफ डेटाटाइम ऑब्जेक्ट बनाएं जो आपके सर्वर के स्थानीय टाइमज़ोन में समय का प्रतिनिधित्व करता है: यह ज्यादातर मामलों में आप नहीं चाहते हैं। आपको इसके बजाए 'datetime.utcfromtimestamp (ts) 'का उपयोग करना चाहिए। – jfs

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

यहां यूकेसी सार्वभौमिक समय समन्वय के लिए खड़ा है।

+1

स्टैक ओवरफ़्लो में आपका स्वागत है। कोड क्या कर रहा है इसके बारे में कुछ स्पष्टीकरण जोड़कर आप इसे बेहतर जवाब दे सकते हैं –

संबंधित मुद्दे