Add internal date formatter

This commit is contained in:
Charles Haley 2010-05-20 12:54:06 +01:00
parent e7c666d60f
commit 210d81c626
2 changed files with 29 additions and 4 deletions

View File

@ -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)

View File

@ -6,6 +6,7 @@ __license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__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)