diff --git a/CHANGES.rst b/CHANGES.rst
index a161db6..1811e84 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,7 +4,8 @@ Changelog
 4.5 (unreleased)
 ----------------
 
-- Nothing changed yet.
+- Add ``__format__`` method for DateTime objects
+  (`#35 <https://github.com/zopefoundation/DateTime/issues/35>`_)
 
 
 4.4 (2022-02-11)
diff --git a/src/DateTime/DateTime.py b/src/DateTime/DateTime.py
index 1f0fde7..f52e2f2 100644
--- a/src/DateTime/DateTime.py
+++ b/src/DateTime/DateTime.py
@@ -1795,6 +1795,14 @@ class DateTime(object):
             return '%4.4d/%2.2d/%2.2d %2.2d:%2.2d:%06.6f %s' % (
                 y, m, d, h, mn, s, t)
 
+    def __format__(self, fmt):
+        """Render a DateTime in an f-string."""
+        if not isinstance(fmt, str):
+            raise TypeError("must be str, not %s" % type(fmt).__name__)
+        if len(fmt) != 0:
+            return self.strftime(fmt)
+        return str(self)
+
     def __hash__(self):
         """Compute a hash value for a DateTime."""
         return int(((self._year % 100 * 12 + self._month) * 31 +

diff --git a/src/DateTime/tests/test_datetime.py b/src/DateTime/tests/test_datetime.py
index ebb539a..49c31b6 100644
--- a/src/DateTime/tests/test_datetime.py
+++ b/src/DateTime/tests/test_datetime.py
@@ -39,7 +39,7 @@ else:  # pragma: PY2
 
 try:
     __file__
-except NameError:
+except NameError:   # pragma: no cover
     f = sys.argv[0]
 else:
     f = __file__
@@ -683,6 +683,19 @@ class DateTimeTests(unittest.TestCase):
         self.assertEqual(dt.__roles__, None)
         self.assertEqual(dt.__allow_access_to_unprotected_subobjects__, 1)
 
+    @unittest.skipUnless(PY3K, 'format method is Python 3 only')
+    def test_format(self):
+        dt = DateTime(1968, 3, 10, 23, 45, 0, 'Europe/Vienna')
+        fmt = '%-d.%-m.%Y %H:%M'
+        result = dt.strftime(fmt)
+        unformatted_result = '1968/03/10 23:45:00 Europe/Vienna'
+        self.assertEqual(result, '{:%-d.%-m.%Y %H:%M}'.format(dt))
+        self.assertEqual(unformatted_result, '{:}'.format(dt))
+        self.assertEqual(unformatted_result, '{}'.format(dt))
+        eval("self.assertEqual(result, f'{dt:{fmt}}')")
+        eval("self.assertEqual(unformatted_result ,f'{dt:}')")
+        eval("self.assertEqual(unformatted_result, f'{dt}')")
+
 
 def test_suite():
     import doctest

supporting fstring formatting
It would be great if DateTime could support the new fstring formatting like datetime already does:

```
import datetime, DateTime
for now in (datetime.datetime.now(), DateTime.DateTime()):
    try:
        print(type(now), f'{now = :%-d.%-m.%Y %H:%M}')
    except TypeError as e:
        print(type(now), e)
```

prints --> 

```
<class 'datetime.datetime'> now = 26.5.2022 05:45
<class 'DateTime.DateTime.DateTime'> unsupported format string passed to DateTime.__format__
```




src/DateTime/tests/test_datetime.py::DateTimeTests::test_format
src/DateTime/tests/test_datetime.py::DateTimeTests::testAddPrecision src/DateTime/tests/test_datetime.py::DateTimeTests::testBasicTZ src/DateTime/tests/test_datetime.py::DateTimeTests::testBug1203 src/DateTime/tests/test_datetime.py::DateTimeTests::testConstructor3 src/DateTime/tests/test_datetime.py::DateTimeTests::testConstructor4 src/DateTime/tests/test_datetime.py::DateTimeTests::testConstructor5 src/DateTime/tests/test_datetime.py::DateTimeTests::testConstructor6 src/DateTime/tests/test_datetime.py::DateTimeTests::testConstructor7 src/DateTime/tests/test_datetime.py::DateTimeTests::testConversions src/DateTime/tests/test_datetime.py::DateTimeTests::testCopyConstructor src/DateTime/tests/test_datetime.py::DateTimeTests::testCopyConstructorPreservesTimezone src/DateTime/tests/test_datetime.py::DateTimeTests::testDSTInEffect src/DateTime/tests/test_datetime.py::DateTimeTests::testDSTNotInEffect src/DateTime/tests/test_datetime.py::DateTimeTests::testDayOfWeek src/DateTime/tests/test_datetime.py::DateTimeTests::testEDTTimezone src/DateTime/tests/test_datetime.py::DateTimeTests::testISO8601 src/DateTime/tests/test_datetime.py::DateTimeTests::testInternationalDateformat src/DateTime/tests/test_datetime.py::DateTimeTests::testJulianWeek src/DateTime/tests/test_datetime.py::DateTimeTests::testOldDate src/DateTime/tests/test_datetime.py::DateTimeTests::testParseISO8601 src/DateTime/tests/test_datetime.py::DateTimeTests::testRFC822 src/DateTime/tests/test_datetime.py::DateTimeTests::testStrftimeFarDates src/DateTime/tests/test_datetime.py::DateTimeTests::testStrftimeTZhandling src/DateTime/tests/test_datetime.py::DateTimeTests::testStrftimeUnicode src/DateTime/tests/test_datetime.py::DateTimeTests::testSubtraction src/DateTime/tests/test_datetime.py::DateTimeTests::testTZ1add src/DateTime/tests/test_datetime.py::DateTimeTests::testTZ1diff src/DateTime/tests/test_datetime.py::DateTimeTests::testTZ1sub src/DateTime/tests/test_datetime.py::DateTimeTests::testTZ2 src/DateTime/tests/test_datetime.py::DateTimeTests::testTZDiffDaylight src/DateTime/tests/test_datetime.py::DateTimeTests::testTimezoneNaiveHandling src/DateTime/tests/test_datetime.py::DateTimeTests::testY10KDate src/DateTime/tests/test_datetime.py::DateTimeTests::testZoneInFarDates src/DateTime/tests/test_datetime.py::DateTimeTests::test_calcTimezoneName src/DateTime/tests/test_datetime.py::DateTimeTests::test_compare_methods src/DateTime/tests/test_datetime.py::DateTimeTests::test_compare_methods_none src/DateTime/tests/test_datetime.py::DateTimeTests::test_interface src/DateTime/tests/test_datetime.py::DateTimeTests::test_intl_format_hyphen src/DateTime/tests/test_datetime.py::DateTimeTests::test_pickle src/DateTime/tests/test_datetime.py::DateTimeTests::test_pickle_old src/DateTime/tests/test_datetime.py::DateTimeTests::test_pickle_old_without_micros src/DateTime/tests/test_datetime.py::DateTimeTests::test_pickle_with_micros src/DateTime/tests/test_datetime.py::DateTimeTests::test_pickle_with_numerical_tz src/DateTime/tests/test_datetime.py::DateTimeTests::test_pickle_with_tz src/DateTime/tests/test_datetime.py::DateTimeTests::test_security src/DateTime/tests/test_datetime.py::DateTimeTests::test_tzoffset src/DateTime/tests/test_datetime.py::test_suite