2011-10-04 32 views
23

Tôi đã cố gắng tìm cách tạo một đối tượng ISODate với ứng dụng pyMongo nhưng không thành công cho đến thời điểm này.Tạo ISODate với pyMongo

Tôi sử dụng http://pypi.python.org/pypi/pymongo3 khách hàng, đây là dịch vụ nghiêm trọng nhất hiện có trong Python 3, nhưng vấn đề dường như không đến từ phiên bản pymongo cụ thể này.

Tôi muốn biết liệu có ai trong số các bạn đã tìm thấy giải pháp để sử dụng loại đối tượng MongoDB này từ ứng dụng khách pymongo không ... nhờ sự giúp đỡ của bạn!

+0

nếu bạn cần chuyển đổi ngày khác "hiện tại", bạn cũng có thể muốn thêm thông tin múi giờ vào ngày giờ của mình, trước khi nhận giá trị utc – kommradHomer

Trả lời

51

Bạn chỉ cần lưu trữ một phiên bản của datetime.datetime.

Chèn từ vỏ python:

>>> 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')} 

Truy vấn trong vỏ Mongo:

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

Có vẻ như không hoạt động, dữ liệu được lưu trữ là một chuỗi. "dấu thời gian": "Wed Oct 05 2011 09:56:02 GMT + 0200 (CET)", –

+0

Bạn đang sử dụng phiên bản MongoDB nào? –

+3

Ngoài ra, ISODate không phải là một loại BSON. Đó chỉ là cách một ngày giờ BSON được thể hiện trong trình bao. Trong PyMongo nó được biểu diễn như một thể hiện của datetime.datetime. http://bsonspec.org/#/specification –

13

Đối với những người đang tự hỏi làm thế nào để tạo ISODate từ timestamp:

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

này sẽ tạo đối tượng datetime không có múi giờ. Khi được chèn vào MongoDB, nó sẽ được chuyển đổi thành thích hợp ISODate().

Ngoài ra, tôi đặc biệt khuyên bạn nên xem Python TimeTransitionsImage. Lưu ý rằng tuple ở đây là có tên tuple (tương đương với cấu trúc trong C). Và cũng lưu ý rằng các trường tuple không giống như trong các đối tác C, mặc dù việc đặt tên giống nhau (ví dụ, tm_wday bắt đầu bằng Thứ Hai và không phải Chủ nhật).

+4

'fromtimestamp()' tạo ra một đối tượng datetime ngây thơ đại diện cho thời gian trong múi giờ địa phương của máy chủ của bạn: nó không phải là những gì bạn muốn trong hầu hết các trường hợp. Thay vào đó, bạn nên sử dụng 'datetime.utcfromtimestamp (ts)'. – jfs

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

Đây utc là viết tắt của Universal Time Coordinates.

+1

Chào mừng bạn đến với Stack Overflow. Bạn có thể làm cho câu trả lời này tốt hơn bằng cách thêm một số giải thích về mã đang làm –

Các vấn đề liên quan