diff --git a/CHANGES.rst b/CHANGES.rst
index b1a8f10..68f43b1 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,12 +4,15 @@ Changelog
 4.7 (unreleased)
 ----------------
 
+- Fix rounding problem with `DateTime` addition beyond the year 2038
+  (`#41 <https://github.com/zopefoundation/DateTime/issues/41>`_)
+
 
 4.6 (2022-09-10)
 ----------------
 
 - Fix ``__format__`` method for DateTime objects
-  (`#39 <https://github.com/zopefoundation/DateTime/issues/39>`)
+  (`#39 <https://github.com/zopefoundation/DateTime/issues/39>`_)
 
 
 4.5 (2022-07-04)
diff --git a/src/DateTime/DateTime.py b/src/DateTime/DateTime.py
index f52e2f2..94f3903 100644
--- a/src/DateTime/DateTime.py
+++ b/src/DateTime/DateTime.py
@@ -864,7 +864,7 @@ class DateTime(object):
         # self._micros is the time since the epoch
         # in long integer microseconds.
         if microsecs is None:
-            microsecs = long(math.floor(t * 1000000.0))
+            microsecs = long(round(t * 1000000.0))
         self._micros = microsecs
 
     def localZone(self, ltm=None):
@@ -1760,7 +1760,7 @@ class DateTime(object):
         x = _calcDependentSecond(tz, t)
         yr, mo, dy, hr, mn, sc = _calcYMDHMS(x, ms)
         return self.__class__(yr, mo, dy, hr, mn, sc, self._tz,
-                              t, d, s, None, self.timezoneNaive())
+                              t, d, s, tmicros, self.timezoneNaive())
 
     __radd__ = __add__
 

diff --git a/src/DateTime/tests/test_datetime.py b/src/DateTime/tests/test_datetime.py
index ead77b5..07d575a 100644
--- a/src/DateTime/tests/test_datetime.py
+++ b/src/DateTime/tests/test_datetime.py
@@ -103,6 +103,16 @@ class DateTimeTests(unittest.TestCase):
         dt = DateTime()
         self.assertEqual(str(dt + 0.10 + 3.14 + 6.76 - 10), str(dt),
                          dt)
+        # checks problem reported in
+        # https://github.com/zopefoundation/DateTime/issues/41
+        dt = DateTime(2038, 10, 7, 8, 52, 44.959840, "UTC")
+        self.assertEqual(str(dt + 0.10 + 3.14 + 6.76 - 10), str(dt),
+                         dt)
+
+    def testConsistentSecondMicroRounding(self):
+        dt = DateTime(2038, 10, 7, 8, 52, 44.9598398, "UTC")
+        self.assertEqual(int(dt.second() * 1000000),
+                         dt.micros() % 60000000)
 
     def testConstructor3(self):
         # Constructor from date/time string

tests fail after 2038-01-10
## BUG/PROBLEM REPORT (OR OTHER COMMON ISSUE)


### What I did:

run tests on 2038-01-10
on openSUSE, I do
```bash
osc co openSUSE:Factory/python-DateTime && cd $_
osc build --vm-type=kvm --noservice --clean --build-opt=--vm-custom-opt="-rtc base=2038-01-10T00:00:00" --alternative-project=home:bmwiedemann:reproducible openSUSE_Tumbleweed
```

### What I expect to happen:

tests should continue to pass in future

### What actually happened:

3 tests failed:
```
     def testAddPrecision(self):  
         # Precision of serial additions
         dt = DateTime()          
 >       self.assertEqual(str(dt + 0.10 + 3.14 + 6.76 - 10), str(dt),
                          dt)              
 E       AssertionError: '2038/10/07 08:52:44.959838 UTC' != '2038/10/07 08:52:44.959840 UTC'    
 E       - 2038/10/07 08:52:44.959838 UTC
 E       ?                         ^^
 E       + 2038/10/07 08:52:44.959840 UTC
 E       ?                         ^^
 E        : 2038/10/07 08:52:44.959840 UTC

 FAILED src/DateTime/tests/test_datetime.py::DateTimeTests::testAddPrecision
 FAILED src/DateTime/tests/test_datetime.py::DateTimeTests::testConstructor4
 FAILED src/DateTime/tests/test_datetime.py::DateTimeTests::testSubtraction - ...
```


### What version of Python and Zope/Addons I am using:

openSUSE-Tumbleweed 20220907
python-3.8

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::testConsistentSecondMicroRounding 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_format 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