Index: main/waeup.kofa/trunk/src/waeup/kofa/schema/field.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/schema/field.py	(revision 8151)
+++ main/waeup.kofa/trunk/src/waeup/kofa/schema/field.py	(revision 8158)
@@ -19,10 +19,10 @@
 """
 from zope.interface import implements
-from zope.schema import TextLine, Date
+from zope.schema import TextLine, Date, Datetime
 from zope.schema.interfaces import (
     ITextLine, IBaseVocabulary, ISource, IContextSourceBinder, InvalidValue,)
 from zope.schema.vocabulary import (
     SimpleVocabulary, getVocabularyRegistry, VocabularyRegistryError)
-from waeup.kofa.schema.interfaces import IFormattedDate
+from waeup.kofa.schema.interfaces import IFormattedDate, IFormattedDatetime
 
 class CustomizableErrorMsg(object):
@@ -153,2 +153,30 @@
         self.show_year = show_year
         return super(FormattedDate, self).__init__(*args, **kw)
+
+class FormattedDatetime(Datetime):
+    """A datetime field that supports additional formatting attributes.
+
+    Stores extra attributes (see below). To make use of these
+    attributes in forms, you have to provide widgets that read them
+    and use them in their operations, for instance the
+    `waeup.kofa.widgets.datewidget.FormattedDatetimeWidget`.
+
+    Extra attributes are as follows:
+
+    `date_format`
+      additional attribute to describe desired date format. Must be a
+      string that can be fed to strftime/strptime functions. By
+      default `None`.
+
+    `show_time`
+      boolean indicating whether also time should be displayed when
+      rendering the value of this field. This should usually be
+      `True`, so it's also the default.
+    """
+    implements(IFormattedDatetime)
+    date_format = None
+    show_time = True
+    def __init__(self, date_format=None, show_time=True, *args, **kw):
+        self.date_format = date_format
+        self.show_time = show_time
+        return super(FormattedDatetime, self).__init__(*args, **kw)
Index: main/waeup.kofa/trunk/src/waeup/kofa/schema/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/schema/interfaces.py	(revision 8151)
+++ main/waeup.kofa/trunk/src/waeup/kofa/schema/interfaces.py	(revision 8158)
@@ -17,5 +17,5 @@
 ##
 from zope import schema
-from zope.schema.interfaces import IDate
+from zope.schema.interfaces import IDate, IDatetime
 
 class IFormattedDate(IDate):
@@ -37,2 +37,21 @@
         default = '%Y-%m-%d',
         )
+
+class IFormattedDatetime(IDatetime):
+    """A formatted datetime.
+
+    Basically a zope.schema.IDatetime, but with optional additional
+    attributes. These attributes _can_ be used by widgets to change
+    the way of editing or displaying a date.
+
+    The waeup.kofa.widgets.datetimewidget.FormattedDatetimeWidget is a
+    widget that supports these additional attributes.
+    """
+    show_time = schema.Bool(
+        title = u'Show time when displaying this date?',
+        default = True,
+        )
+    date_format = schema.ASCII(
+        title = u'A date format string suitable for use with strftime.',
+        default = '%Y-%m-%d %H:%M:%S',
+        )
Index: main/waeup.kofa/trunk/src/waeup/kofa/schema/tests/test_fields.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/schema/tests/test_fields.py	(revision 8151)
+++ main/waeup.kofa/trunk/src/waeup/kofa/schema/tests/test_fields.py	(revision 8158)
@@ -3,7 +3,7 @@
 import unittest
 from zope.interface.verify import verifyClass, verifyObject
-from zope.schema.interfaces import IDate
-from waeup.kofa.schema import FormattedDate
-from waeup.kofa.schema.interfaces import IFormattedDate
+from zope.schema.interfaces import IDate, IDatetime
+from waeup.kofa.schema import FormattedDate, FormattedDatetime
+from waeup.kofa.schema.interfaces import IFormattedDate, IFormattedDatetime
 
 class FormattedDateTests(unittest.TestCase):
@@ -32,2 +32,29 @@
         self.assertEqual(obj.date_format, '%d.%m.%Y')
         return
+
+class FormattedDatetimeTests(unittest.TestCase):
+    # Tests for FormattedDatetime field.
+
+    def test_iface(self):
+        # make sure we fullfill interface contracts
+        obj = FormattedDatetime()
+        verifyClass(IDatetime, FormattedDatetime)
+        verifyClass(IFormattedDatetime, FormattedDatetime)
+        verifyObject(IDatetime, obj)
+        verifyObject(IFormattedDatetime, obj)
+        return
+
+    def test_defaults(self):
+        # we get expected default values for datetimes.
+        obj = FormattedDatetime()
+        self.assertEqual(obj.show_time, True)
+        self.assertEqual(obj.date_format, None)
+        return
+
+    def test_attribs(self):
+        # we can set the promised attributes.
+        obj = FormattedDatetime(show_time=False,
+                                date_format='%d.%m.%Y %H:%M:%S Uhr')
+        self.assertEqual(obj.show_time, False)
+        self.assertEqual(obj.date_format, '%d.%m.%Y %H:%M:%S Uhr')
+        return
