from datetime import datetime import unittest import pywintypes import win32com.client import win32com.test.util import win32com.server.util from win32timezone import TimeZoneInfo # A COM object so we can pass dates to and from the COM boundary. class Tester: _public_methods_ = [ 'TestDate' ] def TestDate(self, d): assert isinstance(d, datetime) return d def test_ob(): return win32com.client.Dispatch(win32com.server.util.wrap(Tester())) class TestCase(win32com.test.util.TestCase): def check(self, d, expected = None): if not issubclass(pywintypes.TimeType, datetime): self.skipTest("this is testing pywintypes and datetime") got = test_ob().TestDate(d) self.assertEqual(got, expected or d) def testUTC(self): self.check(datetime(year=2000, month=12, day=25, microsecond=500000, tzinfo=TimeZoneInfo.utc())) def testLocal(self): self.check(datetime(year=2000, month=12, day=25, microsecond=500000, tzinfo=TimeZoneInfo.local())) def testMSTruncated(self): # milliseconds are kept but microseconds are lost after rounding. self.check(datetime(year=2000, month=12, day=25, microsecond=500500, tzinfo=TimeZoneInfo.utc()), datetime(year=2000, month=12, day=25, microsecond=500000, tzinfo=TimeZoneInfo.utc())) if __name__=='__main__': unittest.main()