Mongodb có chuyển đổi ngày thành utc không?

PyMongo sử dụng các đối tượng

>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
4 để biểu thị ngày và giờ trong tài liệu MongoDB. Vì MongoDB giả định rằng ngày và giờ ở dạng UTC, nên cần cẩn thận để đảm bảo rằng ngày và giờ được ghi vào cơ sở dữ liệu phản ánh UTC. Ví dụ: đoạn mã sau lưu trữ ngày giờ UTC hiện tại vào MongoDB

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

Luôn sử dụng

>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
1, trả về thời gian hiện tại theo UTC, thay vì
>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
2, trả về giờ địa phương hiện tại. Tránh làm điều này

>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})

Giá trị của last_modified giữa hai ví dụ này rất khác nhau, mặc dù cả hai tài liệu đều được lưu trữ vào cùng một giờ địa phương. Điều này sẽ gây nhầm lẫn cho ứng dụng đọc chúng

>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]

>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
3 có một tùy chọn tz_aware cho phép các đối tượng
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
4 “nhận biết”, tôi. e. , datetimes biết họ đang ở múi giờ nào. Theo mặc định, PyMongo truy xuất thời gian biểu ngây thơ

>>> result = db.tzdemo.insert_one(
..     {'date': datetime.datetime(2002, 10, 27, 6, 0, 0)})
>>> db.tzdemo.find_one()['date']
datetime.datetime(2002, 10, 27, 6, 0)
>>> options = CodecOptions(tz_aware=True)
>>> db.get_collection('tzdemo', codec_options=options).find_one()['date']  
datetime.datetime(2002, 10, 27, 6, 0,
                  tzinfo=)

Lưu Ngày giờ với Múi giờ¶

Khi lưu trữ các đối tượng

>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
4 chỉ định múi giờ (i. e. họ có một thuộc tính tzinfo không phải là
>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
6), PyMongo sẽ tự động chuyển đổi các mốc thời gian đó thành UTC

________số 8

Thời gian đọc¶

Như đã đề cập trước đây, theo mặc định, tất cả các đối tượng

>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
4 do PyMongo trả về sẽ là ngây thơ nhưng phản ánh UTC (i. e. thời gian như được lưu trữ trong MongoDB). Bằng cách đặt tùy chọn tz_aware trên các đối tượng
>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
8,
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
4 sẽ nhận biết múi giờ và có thuộc tính tzinfo phản ánh múi giờ UTC

PyMongo 3. 1 đã giới thiệu thuộc tính tzinfo có thể được đặt trên

>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
8 để tự động chuyển đổi đối tượng
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
4 sang giờ địa phương. Ví dụ: nếu chúng tôi muốn đọc tất cả thời gian trong MongoDB theo giờ Hoa Kỳ/Thái Bình Dương

>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
1

Xử lý thời gian ngoài phạm vi¶

>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
2 của Python chỉ có thể biểu thị các mốc thời gian trong phạm vi được cho phép bởi
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
3 và
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
4, trong khi phạm vi các mốc thời gian được phép trong BSON có thể biểu thị bất kỳ số mili giây 64 bit nào từ kỷ nguyên Unix. Để giải quyết vấn đề này, chúng ta có thể sử dụng đối tượng
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
5, là một trình bao bọc cho đối tượng tích hợp sẵn
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
6

Để giải mã các giá trị ngày giờ UTC là

>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
7,
>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
8 phải đặt tham số
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
9 của nó thành một trong các tùy chọn có sẵn trong
>>> result = db.tzdemo.insert_one(
..     {'date': datetime.datetime(2002, 10, 27, 6, 0, 0)})
>>> db.tzdemo.find_one()['date']
datetime.datetime(2002, 10, 27, 6, 0)
>>> options = CodecOptions(tz_aware=True)
>>> db.get_collection('tzdemo', codec_options=options).find_one()['date']  
datetime.datetime(2002, 10, 27, 6, 0,
                  tzinfo=)
0. Chúng bao gồm
>>> result = db.tzdemo.insert_one(
..     {'date': datetime.datetime(2002, 10, 27, 6, 0, 0)})
>>> db.tzdemo.find_one()['date']
datetime.datetime(2002, 10, 27, 6, 0)
>>> options = CodecOptions(tz_aware=True)
>>> db.get_collection('tzdemo', codec_options=options).find_one()['date']  
datetime.datetime(2002, 10, 27, 6, 0,
                  tzinfo=)
1,
>>> result = db.tzdemo.insert_one(
..     {'date': datetime.datetime(2002, 10, 27, 6, 0, 0)})
>>> db.tzdemo.find_one()['date']
datetime.datetime(2002, 10, 27, 6, 0)
>>> options = CodecOptions(tz_aware=True)
>>> db.get_collection('tzdemo', codec_options=options).find_one()['date']  
datetime.datetime(2002, 10, 27, 6, 0,
                  tzinfo=)
2,
>>> result = db.tzdemo.insert_one(
..     {'date': datetime.datetime(2002, 10, 27, 6, 0, 0)})
>>> db.tzdemo.find_one()['date']
datetime.datetime(2002, 10, 27, 6, 0)
>>> options = CodecOptions(tz_aware=True)
>>> db.get_collection('tzdemo', codec_options=options).find_one()['date']  
datetime.datetime(2002, 10, 27, 6, 0,
                  tzinfo=)
3,
>>> result = db.tzdemo.insert_one(
..     {'date': datetime.datetime(2002, 10, 27, 6, 0, 0)})
>>> db.tzdemo.find_one()['date']
datetime.datetime(2002, 10, 27, 6, 0)
>>> options = CodecOptions(tz_aware=True)
>>> db.get_collection('tzdemo', codec_options=options).find_one()['date']  
datetime.datetime(2002, 10, 27, 6, 0,
                  tzinfo=)
4.
>>> result = db.tzdemo.insert_one(
..     {'date': datetime.datetime(2002, 10, 27, 6, 0, 0)})
>>> db.tzdemo.find_one()['date']
datetime.datetime(2002, 10, 27, 6, 0)
>>> options = CodecOptions(tz_aware=True)
>>> db.get_collection('tzdemo', codec_options=options).find_one()['date']  
datetime.datetime(2002, 10, 27, 6, 0,
                  tzinfo=)
1 là tùy chọn mặc định và có hành vi tăng
>>> result = db.tzdemo.insert_one(
..     {'date': datetime.datetime(2002, 10, 27, 6, 0, 0)})
>>> db.tzdemo.find_one()['date']
datetime.datetime(2002, 10, 27, 6, 0)
>>> options = CodecOptions(tz_aware=True)
>>> db.get_collection('tzdemo', codec_options=options).find_one()['date']  
datetime.datetime(2002, 10, 27, 6, 0,
                  tzinfo=)
6 khi cố gắng giải mã một ngày nằm ngoài phạm vi.
>>> result = db.tzdemo.insert_one(
..     {'date': datetime.datetime(2002, 10, 27, 6, 0, 0)})
>>> db.tzdemo.find_one()['date']
datetime.datetime(2002, 10, 27, 6, 0)
>>> options = CodecOptions(tz_aware=True)
>>> db.get_collection('tzdemo', codec_options=options).find_one()['date']  
datetime.datetime(2002, 10, 27, 6, 0,
                  tzinfo=)
2 sẽ chỉ trả về các đối tượng
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
7, bất kể ngày giờ được biểu thị nằm trong hay ngoài phạm vi

>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
9

>>> result = db.tzdemo.insert_one(
..     {'date': datetime.datetime(2002, 10, 27, 6, 0, 0)})
>>> db.tzdemo.find_one()['date']
datetime.datetime(2002, 10, 27, 6, 0)
>>> options = CodecOptions(tz_aware=True)
>>> db.get_collection('tzdemo', codec_options=options).find_one()['date']  
datetime.datetime(2002, 10, 27, 6, 0,
                  tzinfo=)
3 sẽ trả về
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
2 nếu ngày giờ UTC cơ bản nằm trong phạm vi hoặc
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
7 nếu ngày giờ cơ bản không thể được biểu diễn bằng cách sử dụng Python dựng sẵn
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
2

>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
4

>>> result = db.tzdemo.insert_one(
..     {'date': datetime.datetime(2002, 10, 27, 6, 0, 0)})
>>> db.tzdemo.find_one()['date']
datetime.datetime(2002, 10, 27, 6, 0)
>>> options = CodecOptions(tz_aware=True)
>>> db.get_collection('tzdemo', codec_options=options).find_one()['date']  
datetime.datetime(2002, 10, 27, 6, 0,
                  tzinfo=)
4 sẽ kẹp kết quả là các đối tượng
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
2 nằm trong phạm vi
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
3 và
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
4 (được cắt thành 999000 micro giây)

>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
9

Các đối tượng

>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
7 có hỗ trợ các phương pháp so sánh phong phú với các phiên bản khác của
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
7. Chúng cũng có thể được chuyển đổi thành các đối tượng
>>> [doc['last_modified'] for doc in db.objects.find()]  
[datetime.datetime(2015, 7, 8, 18, 17, 28, 324000),
 datetime.datetime(2015, 7, 8, 11, 17, 42, 911000)]
2 với
>>> result = db.objects.insert_one(
..     {"last_modified": datetime.datetime.now()})
10

MongoDB sử dụng định dạng ngày nào?

Các chức năng này chấp nhận các định dạng sau. new Date(" trả về ISODate với ngày đã chỉ định. ngày mới("

MongoDB có loại ngày không?

Cách được đề xuất để lưu trữ ngày trong MongoDB là sử dụng Kiểu dữ liệu Ngày BSON . Đặc tả BSON đề cập đến loại Ngày là ngày giờ UTC và là số nguyên 64 bit. Nó đại diện cho số mili giây kể từ kỷ nguyên Unix, là 00. 00. 00 UTC ngày 1 tháng 1 năm 1970.

Ngày có nên được lưu trữ trong UTC không?

Khi lưu trữ ngày tháng trong cơ sở dữ liệu, chúng phải luôn ở dạng UTC . Nếu bạn không biết UTC là gì, thì đó là tiêu chuẩn thời gian chính mà tất cả các múi giờ chính đều dựa trên. Các múi giờ chính chỉ là phần bù từ UTC.

Định dạng ngày giờ cho UTC là gì?

Thời gian UTC trong ISO-8601 là 09. 51. 00Z. Lưu ý rằng chữ Z không có dấu cách. . Ngày và giờ UTC ở các định dạng khác nhau