2012-10-19 35 views
7

Tôi đang cố gắng để tô điểm ObjectIDs timestamp với py-pretty nhưng nó giữ cho tôi một Lỗi Loại:Mongo ObjectId: "Không thể so sánh bù đắp-ngây thơ và bù đắp-aware datetimes" ngay cả với pytz

TypeError: can't compare offset-naive and offset-aware datetimes 

ngay cả sau khi Tôi cố gắng chuyển đổi dấu thời gian thành múi giờ không biết ngày UTC với Pytz. Đây là mã tôi đang cố gắng

import datetime 
import pytz 
import pretty 
# ... 

song = db.songs.find_one({ 'GUID' :}) 
dateTimeUnaware = song['_id'].generation_time.now(pytz.utc) 
prettyDate = pretty.date(dateTimeUnaware) 

Tại sao điều này tiếp tục cho tôi lỗi loại? Không nên chức năng pytz làm cho nó bất khả tri thời gian?

+0

Những gì bạn có có một múi giờ biết datetime nó là không thuyết phục ... có pytz.utc cho nó một múi giờ của utc. Loại bỏ điều đó sẽ giải quyết vấn đề của bạn 'dateTimeUnaware = song ['_ id']. Generation_time.now()' – Pykler

Trả lời

18

Tôi không phải là chuyên gia đáng yêu, nhưng mã của bạn không chuyển đổi ngày nhận biết múi giờ thành ngày không xác định múi giờ.

Chỉ cần có ngày hiện tại (sử dụng now) trong múi giờ utc (vì vậy hãy biết múi giờ).

Bạn ngây thơ có thể chuyển đổi datetime tz-aware để tz-không biết từng người sử dụng:

your_datetime_var.replace(tzinfo=None) 

trong trường hợp của bạn:

song['_id'].generation_time.replace(tzinfo=None) 

Lưu ý rằng "ngây thơ" trong trường hợp này có nghĩa là tất cả các lĩnh vực liên quan đến ngày tháng và thời gian sẽ có cùng giá trị với giá trị ban đầu, nhưng thông tin về múi giờ và DST sẽ bị mất.

BTW nó trông giống như py-khá là bỏ dở (upload cuối cùng để pypi trong năm 2010, mã nguồn không thể tiếp cận) để nó có thể là một ý tưởng tốt để tìm kiếm sự thay thế

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