Index: main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/accesscode.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/accesscode.py	(revision 8185)
+++ main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/accesscode.py	(revision 8186)
@@ -33,4 +33,5 @@
 from zope.component import getUtility
 from waeup.kofa.interfaces import IKofaUtils, IKofaPluggable, IObjectHistory
+from waeup.kofa.utils.helpers import now
 from waeup.kofa.utils.logger import Logger
 from waeup.kofa.accesscodes.interfaces import (
@@ -247,6 +248,6 @@
         ac_storage = self._getStoragePath()
         tz = getUtility(IKofaUtils).tzinfo
-        now = datetime.now(tz)
-        timestamp = now.strftime('%Y_%m_%d_%H_%M_%S')
+        dt_now = now(tz)
+        timestamp = dt_now.strftime('%Y_%m_%d_%H_%M_%S')
         csv_path = os.path.join(
             ac_storage, '%s-%s_archive-%s-%s.csv' % (
Index: main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/tests/test_accesscode.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/tests/test_accesscode.py	(revision 8185)
+++ main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/tests/test_accesscode.py	(revision 8186)
@@ -233,5 +233,5 @@
         # Access codes have a history.
         match = re.match(
-            '^....-..-.. ..:..:.. - initialized by system',
+            '^....-..-.. ..:..:.. ..... .+ - initialized by system',
             self.ac1.history)
         assert match is not None
@@ -301,7 +301,7 @@
 "prefix","serial","ac","state","history"
 "FOO","9.99","1","0"
-"FOO","0","FOO-1-11111111","used","<YYYY-MM-DD hh:mm:ss> - ..."
-"FOO","1","FOO-1-22222222","initialized","<YYYY-MM-DD hh:mm:ss> - ..."
-"FOO","2","FOO-1-33333333","disabled","<YYYY-MM-DD hh:mm:ss> - ..."
+"FOO","0","FOO-1-11111111","used","<YYYY-MM-DD hh:mm:ss TZ> - ..."
+"FOO","1","FOO-1-22222222","initialized","<YYYY-MM-DD hh:mm:ss TZ> - ..."
+"FOO","2","FOO-1-33333333","disabled","<YYYY-MM-DD hh:mm:ss TZ> - ..."
 '''[1:]
         contents = open(result_path, 'rb').read()
Index: main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py	(revision 8185)
+++ main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py	(revision 8186)
@@ -51,5 +51,5 @@
 from waeup.kofa.permissions import get_users_with_local_roles
 from waeup.kofa.students.interfaces import IStudentsUtils
-from waeup.kofa.utils.helpers import string_from_bytes, file_size
+from waeup.kofa.utils.helpers import string_from_bytes, file_size, now
 from waeup.kofa.widgets.datewidget import (
     FriendlyDateDisplayWidget, FriendlyDateDisplayWidget,
@@ -829,5 +829,5 @@
         IWorkflowInfo(self.context).fireTransition('submit')
         tz = getUtility(IKofaUtils).tzinfo
-        self.context.application_date = datetime.now(tz)
+        self.context.application_date = now(tz)
         self.context.locked = True
         self.flash(_('Form has been submitted.'))
Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/pdf.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/pdf.py	(revision 8185)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/pdf.py	(revision 8186)
@@ -34,4 +34,5 @@
 from zope.component import getUtility
 from waeup.kofa.browser.interfaces import IPDFCreator
+from waeup.kofa.utils.helpers import now
 from waeup.kofa.interfaces import IKofaUtils
 from waeup.kofa.interfaces import MessageFactory as _
@@ -331,5 +332,5 @@
         if not getattr(doc, 'kofa_nodate', False):
             tz = getUtility(IKofaUtils).tzinfo
-            today = datetime.now(tz).strftime('%d/%m/%Y %H:%M:%S')
+            today = now(tz).strftime('%d/%m/%Y %H:%M:%S %z %Z')
             canvas.drawString(2.2*cm, 0.5 * inch,
                 translate(_(u'Date: ${a}', mapping = {'a': today})))
Index: main/waeup.kofa/trunk/src/waeup/kofa/hostels/hostel.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/hostels/hostel.py	(revision 8185)
+++ main/waeup.kofa/trunk/src/waeup/kofa/hostels/hostel.py	(revision 8186)
@@ -29,4 +29,5 @@
 from waeup.kofa.interfaces import IKofaUtils
 from waeup.kofa.interfaces import MessageFactory as _
+from waeup.kofa.utils.helpers import now
 
 class Hostel(grok.Container):
@@ -164,10 +165,12 @@
 
             # Comment of Martijn:
-            # If you have a non-Persistent subobject (like a list) and you change it,
-            # you need to manually flag the persistence machinery on the object that
-            # its subobject changed, with _p_changed. This is only necessary if some
-            # of the objects are not sublclasses of Persistent. For common built-in
-            # collections in Python such as list and dictionary there are replacements
-            # (PersistentList, PersistentMapping), and more advanced building blocks
+            # If you have a non-Persistent subobject (like a list) and
+            # you change it, you need to manually flag the persistence
+            # machinery on the object that its subobject changed, with
+            # _p_changed. This is only necessary if some of the
+            # objects are not sublclasses of Persistent. For common
+            # built-in collections in Python such as list and
+            # dictionary there are replacements (PersistentList,
+            # PersistentMapping), and more advanced building blocks
             # for indexes (BTrees), that don't have this issue.
             #hostel._p_changed = True
@@ -207,6 +210,7 @@
             bedticket.bed = None
             tz = getUtility(IKofaUtils).tzinfo
-            timestamp = datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
-            bedticket.bed_coordinates = u'-- booking cancelled on %s --' % timestamp
+            timestamp = now(tz).strftime("%Y-%m-%d %H:%M:%S %z %Z")
+            bedticket.bed_coordinates = u'-- booking cancelled on %s --' % (
+                timestamp,)
             return old_owner
 
Index: main/waeup.kofa/trunk/src/waeup/kofa/hostels/tests.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/hostels/tests.py	(revision 8185)
+++ main/waeup.kofa/trunk/src/waeup/kofa/hostels/tests.py	(revision 8186)
@@ -284,5 +284,5 @@
           self.browser.contents)
         self.assertMatches(bedticket.bed_coordinates,
-          u' -- booking cancelled on <YYYY-MM-DD hh:mm:ss> --')
+          u' -- booking cancelled on <YYYY-MM-DD hh:mm:ss TZ> --')
         # If we release a free be, nothing will happen
         ctrl = self.browser.getControl(name='val_id')
Index: main/waeup.kofa/trunk/src/waeup/kofa/objecthistory.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/objecthistory.py	(revision 8185)
+++ main/waeup.kofa/trunk/src/waeup/kofa/objecthistory.py	(revision 8186)
@@ -23,5 +23,5 @@
 from zope.annotation.interfaces import IAnnotations
 from waeup.kofa.interfaces import IObjectHistory, IKofaObject, IKofaUtils
-from waeup.kofa.utils.helpers import get_current_principal
+from waeup.kofa.utils.helpers import get_current_principal, now
 
 from waeup.kofa.interfaces import MessageFactory as _
@@ -61,5 +61,5 @@
         msgs = self._getMessages()
         tz = getUtility(IKofaUtils).tzinfo
-        timestamp = datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
+        timestamp = now(tz).strftime("%Y-%m-%d %H:%M:%S %z %Z")
         user = get_current_principal()
         if user is None:
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py	(revision 8185)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py	(revision 8186)
@@ -39,4 +39,5 @@
 from waeup.kofa.interfaces import MessageFactory as _
 from waeup.kofa.students.interfaces import IStudentsUtils
+from waeup.kofa.utils.helpers import now
 
 SLIP_STYLE = [
@@ -208,5 +209,5 @@
       frame_footer = Frame(1*cm,0,width-(2*cm),1*cm)
       tz = getUtility(IKofaUtils).tzinfo
-      timestamp = datetime.now(tz).strftime("%d/%m/%Y %H:%M:%S")
+      timestamp = now(tz).strftime("%d/%m/%Y %H:%M:%S %z %Z")
       left_text = '<font size=10>%s</font>' % timestamp
       story.append(Paragraph(left_text, style["Normal"]))
Index: main/waeup.kofa/trunk/src/waeup/kofa/testing.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/testing.py	(revision 8185)
+++ main/waeup.kofa/trunk/src/waeup/kofa/testing.py	(revision 8186)
@@ -295,4 +295,6 @@
     (re.compile(r'httperror_seek_wrapper:'), 'HTTPError:' ),
     (re.compile('[\d]{10}'), '<10-DIGITS>'),
+    (re.compile('\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [\+\-]\d\d\d\d [^ ]+'),
+     '<YYYY-MM-DD hh:mm:ss TZ>'),
     (re.compile('\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d'), '<YYYY-MM-DD hh:mm:ss>'),
     (re.compile('\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d'), '<DATETIME>'),
Index: main/waeup.kofa/trunk/src/waeup/kofa/tests/test_objecthistory.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/tests/test_objecthistory.py	(revision 8185)
+++ main/waeup.kofa/trunk/src/waeup/kofa/tests/test_objecthistory.py	(revision 8186)
@@ -80,5 +80,5 @@
         hist.addMessage('blah')
         result = ''.join(hist.messages)
-        self.assertMatches('<YYYY-MM-DD hh:mm:ss> - blah by system', result)
+        self.assertMatches('<YYYY-MM-DD hh:mm:ss TZ> - blah by system', result)
 
     def test_add_messages_existing_principal(self):
@@ -89,5 +89,5 @@
         hist.addMessage('blah')
         result = ''.join(hist.messages)
-        self.assertMatches('<YYYY-MM-DD hh:mm:ss> - blah by Bob', result)
+        self.assertMatches('<YYYY-MM-DD hh:mm:ss TZ> - blah by Bob', result)
 
     def test_messages(self):
