From 8fb4561ff4090bf56afaaa4aa7f5c6f68b2ce408 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 22 Jun 2011 19:25:56 -0600 Subject: [PATCH] Fix #799777 (Error retrieving date out of epub) --- src/calibre/gui2/metadata/basic_widgets.py | 6 ++++-- src/calibre/utils/date.py | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/metadata/basic_widgets.py b/src/calibre/gui2/metadata/basic_widgets.py index 303cc51c74..858aafafc6 100644 --- a/src/calibre/gui2/metadata/basic_widgets.py +++ b/src/calibre/gui2/metadata/basic_widgets.py @@ -21,9 +21,10 @@ from calibre.utils.config import tweaks, prefs from calibre.ebooks.metadata import (title_sort, authors_to_string, string_to_authors, check_isbn, authors_to_sort_string) from calibre.ebooks.metadata.meta import get_metadata -from calibre.gui2 import (file_icon_provider, UNDEFINED_QDATE, UNDEFINED_DATE, +from calibre.gui2 import (file_icon_provider, UNDEFINED_QDATE, choose_files, error_dialog, choose_images) -from calibre.utils.date import local_tz, qt_to_dt +from calibre.utils.date import (local_tz, qt_to_dt, as_local_time, + UNDEFINED_DATE) from calibre import strftime from calibre.ebooks import BOOK_EXTENSIONS from calibre.customize.ui import run_plugins_on_import @@ -1211,6 +1212,7 @@ class DateEdit(QDateEdit): # {{{ def fset(self, val): if val is None: val = UNDEFINED_DATE + val = as_local_time(val) self.setDate(QDate(val.year, val.month, val.day)) return property(fget=fget, fset=fset) diff --git a/src/calibre/utils/date.py b/src/calibre/utils/date.py index b368c0ed9b..c93e69874c 100644 --- a/src/calibre/utils/date.py +++ b/src/calibre/utils/date.py @@ -123,6 +123,14 @@ def isoformat(date_time, assume_utc=False, as_utc=True, sep='T'): date_time = date_time.astimezone(_utc_tz if as_utc else _local_tz) return unicode(date_time.isoformat(sep)) +def as_local_time(date_time, assume_utc=True): + if not hasattr(date_time, 'tzinfo'): + return date_time + if date_time.tzinfo is None: + date_time = date_time.replace(tzinfo=_utc_tz if assume_utc else + _local_tz) + return date_time.astimezone(_local_tz) + def now(): return datetime.now().replace(tzinfo=_local_tz)