diff --git a/CHANGES.rst b/CHANGES.rst
index 3ee820c..082d109 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -7,6 +7,9 @@ Changelog
 - Fix ``UnknownTimeZoneError`` when unpickling ``DateTime.DateTime().asdatetime()``.
   (`#58 <https://github.com/zopefoundation/DateTime/issues/58>`_)
 
+- Repair equality comparison between DateTime instances and other types.
+  (`#60 <https://github.com/zopefoundation/DateTime/issues/60>`_)
+
 
 5.3 (2023-11-14)
 ----------------
diff --git a/src/DateTime/DateTime.py b/src/DateTime/DateTime.py
index 1835705..8e1ec6d 100644
--- a/src/DateTime/DateTime.py
+++ b/src/DateTime/DateTime.py
@@ -1250,8 +1250,10 @@ class DateTime:
             return True
         if isinstance(t, (float, int)):
             return self._micros > long(t * 1000000)
-        else:
+        try:
             return self._micros > t._micros
+        except AttributeError:
+            return self._micros > t
 
     __gt__ = greaterThan
 
@@ -1271,8 +1273,10 @@ class DateTime:
             return True
         if isinstance(t, (float, int)):
             return self._micros >= long(t * 1000000)
-        else:
+        try:
             return self._micros >= t._micros
+        except AttributeError:
+            return self._micros >= t
 
     __ge__ = greaterThanEqualTo
 
@@ -1291,8 +1295,10 @@ class DateTime:
             return False
         if isinstance(t, (float, int)):
             return self._micros == long(t * 1000000)
-        else:
+        try:
             return self._micros == t._micros
+        except AttributeError:
+            return self._micros == t
 
     def notEqualTo(self, t):
         """Compare this DateTime object to another DateTime object
@@ -1336,8 +1342,10 @@ class DateTime:
             return False
         if isinstance(t, (float, int)):
             return self._micros < long(t * 1000000)
-        else:
+        try:
             return self._micros < t._micros
+        except AttributeError:
+            return self._micros < t
 
     __lt__ = lessThan
 
@@ -1356,8 +1364,10 @@ class DateTime:
             return False
         if isinstance(t, (float, int)):
             return self._micros <= long(t * 1000000)
-        else:
+        try:
             return self._micros <= t._micros
+        except AttributeError:
+            return self._micros <= t
 
     __le__ = lessThanEqualTo
 

diff --git a/src/DateTime/tests/test_datetime.py b/src/DateTime/tests/test_datetime.py
index 827d002..ae67d45 100644
--- a/src/DateTime/tests/test_datetime.py
+++ b/src/DateTime/tests/test_datetime.py
@@ -219,6 +219,8 @@ class DateTimeTests(unittest.TestCase):
         self.assertFalse(dt.equalTo(dt1))
         # Compare a date to float
         dt = DateTime(1.0)
+        self.assertTrue(dt == DateTime(1.0))  # testing __eq__
+        self.assertFalse(dt != DateTime(1.0))  # testing __ne__
         self.assertFalse(dt.greaterThan(1.0))
         self.assertTrue(dt.greaterThanEqualTo(1.0))
         self.assertFalse(dt.lessThan(1.0))
@@ -228,12 +230,26 @@ class DateTimeTests(unittest.TestCase):
         # Compare a date to int
         dt = DateTime(1)
         self.assertEqual(dt, DateTime(1.0))
+        self.assertTrue(dt == DateTime(1))  # testing __eq__
+        self.assertFalse(dt != DateTime(1))  # testing __ne__
         self.assertFalse(dt.greaterThan(1))
         self.assertTrue(dt.greaterThanEqualTo(1))
         self.assertFalse(dt.lessThan(1))
         self.assertTrue(dt.lessThanEqualTo(1))
         self.assertFalse(dt.notEqualTo(1))
         self.assertTrue(dt.equalTo(1))
+        # Compare a date to string; there is no implicit type conversion
+        # but behavior if consistent as when comparing, for example, an int
+        # and a string.
+        dt = DateTime("2023")
+        self.assertFalse(dt == "2023")  # testing __eq__
+        self.assertTrue(dt != "2023")  # testing __ne__
+        self.assertRaises(TypeError, dt.greaterThan, "2023")
+        self.assertRaises(TypeError, dt.greaterThanEqualTo, "2023")
+        self.assertRaises(TypeError, dt.lessThan, "2023")
+        self.assertRaises(TypeError, dt.lessThanEqualTo, "2023")
+        self.assertTrue(dt.notEqualTo("2023"))
+        self.assertFalse(dt.equalTo("2023"))
 
     def test_compare_methods_none(self):
         # Compare a date to None

`DateTime.DateTime.equalTo` now breaks with string argument
## BUG/PROBLEM REPORT / FEATURE REQUEST

Since DateTime 5.2, using `DateTime.DateTime.equalTo` with something else than a `DateTime` or a number throws `AttributeError`. This is a regression from https://github.com/zopefoundation/DateTime/pull/54  ( cc @fdiary )

### What I did:

```
>>> import DateTime
>>> DateTime.DateTime() == ""
False
>>> DateTime.DateTime().equalTo("")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "./DateTime/src/DateTime/DateTime.py", line 1295, in equalTo
    return self._micros == t._micros
AttributeError: 'str' object has no attribute '_micros'
```

### What I expect to happen:

`DateTime.DateTime().equalTo("")` should be `False`

### What actually happened:

`AttributeError: 'str' object has no attribute '_micros'`

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

This is current master branch 955f3b920b2020c2407e7d9f4aa24e6ef7d20d9d

src/DateTime/tests/test_datetime.py::DateTimeTests::test_compare_methods
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::testStrftimeStr src/DateTime/tests/test_datetime.py::DateTimeTests::testStrftimeTZhandling 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_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_asdatetime_with_tz 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