From 210d81c626e13370f3a474a3a9851625703a08a2 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 20 May 2010 12:54:06 +0100 Subject: [PATCH] Add internal date formatter --- src/calibre/gui2/library/delegates.py | 8 ++++---- src/calibre/utils/date.py | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/calibre/gui2/library/delegates.py b/src/calibre/gui2/library/delegates.py index c1e4915db1..d908ed01b4 100644 --- a/src/calibre/gui2/library/delegates.py +++ b/src/calibre/gui2/library/delegates.py @@ -17,7 +17,7 @@ from PyQt4.Qt import QColor, Qt, QModelIndex, QSize, \ from calibre.gui2 import UNDEFINED_QDATE from calibre.gui2.widgets import EnLineEdit, TagsLineEdit -from calibre.utils.date import now +from calibre.utils.date import now, format_date from calibre.utils.config import tweaks from calibre.gui2.dialogs.comments_dialog import CommentsDialog @@ -98,7 +98,7 @@ class DateDelegate(QStyledItemDelegate): # {{{ d = val.toDate() if d == UNDEFINED_QDATE: return '' - return d.toString('dd MMM yyyy') + return format_date(d.toPyDate(), 'dd MMM yyyy') def createEditor(self, parent, option, index): qde = QStyledItemDelegate.createEditor(self, parent, option, index) @@ -121,7 +121,7 @@ class PubDateDelegate(QStyledItemDelegate): # {{{ format = tweaks['gui_pubdate_display_format'] if format is None: format = 'MMM yyyy' - return d.toString(format) + return format_date(d.toPyDate(), format) def createEditor(self, parent, option, index): qde = QStyledItemDelegate.createEditor(self, parent, option, index) @@ -195,7 +195,7 @@ class CcDateDelegate(QStyledItemDelegate): # {{{ d = val.toDate() if d == UNDEFINED_QDATE: return '' - return d.toString(self.format) + return format_date(d.toPyDate(), self.format) def createEditor(self, parent, option, index): qde = QStyledItemDelegate.createEditor(self, parent, option, index) diff --git a/src/calibre/utils/date.py b/src/calibre/utils/date.py index a43927c9c5..dc84e6acf4 100644 --- a/src/calibre/utils/date.py +++ b/src/calibre/utils/date.py @@ -6,6 +6,7 @@ __license__ = 'GPL v3' __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' +import re from datetime import datetime from dateutil.parser import parse @@ -113,3 +114,27 @@ def utcnow(): def utcfromtimestamp(stamp): return datetime.utcfromtimestamp(stamp).replace(tzinfo=_utc_tz) + +def format_date(dt, format): + ''' Return a date formatted as a string using a subset of Qt's formatting codes ''' + def format_day(mo): + l = len(mo.group(0)) + if l == 1: return '%d'%dt.day + if l == 2: return '%02d'%dt.day + if l == 3: return dt.strftime('%a') + return dt.strftime('%A') + + def format_month(mo): + l = len(mo.group(0)) + if l == 1: return '%d'%dt.month + if l == 2: return '%02d'%dt.month + if l == 3: return dt.strftime('%b') + return dt.strftime('%B') + + def format_year(mo): + if len(mo.group(0)) == 2: return '%02d'%(dt.year % 100) + return '%04d'%dt.year + + format = re.sub('d{1,4}', format_day, format) + format = re.sub('M{1,4}', format_month, format) + return re.sub('yyyy|yy', format_year, format)