2525"""Tools to convert between Python datetime instances and Microsoft times.
2626"""
2727from calendar import timegm
28- import datetime
28+ from datetime import datetime , timezone , tzinfo , timedelta
2929
3030# http://support.microsoft.com/kb/167296
3131# How To Convert a UNIX time_t to a Win32 FILETIME or SYSTEMTIME
3232EPOCH_AS_FILETIME = 116444736000000000 # January 1, 1970 as MS file time
3333HUNDREDS_OF_NANOSECONDS = 10000000
3434
3535
36- ZERO = datetime . timedelta (0 )
37- HOUR = datetime . timedelta (hours = 1 )
36+ ZERO = timedelta (0 )
37+ HOUR = timedelta (hours = 1 )
3838
3939
40- class UTC (datetime . tzinfo ):
40+ class UTC (tzinfo ):
4141 """UTC"""
4242
43- def utcoffset (self , dt ) :
43+ def utcoffset (self , dt : datetime ) -> timedelta :
4444 return ZERO
4545
46- def tzname (self , dt ) :
46+ def tzname (self , dt : datetime ) -> str :
4747 return "UTC"
4848
49- def dst (self , dt ) :
49+ def dst (self , dt : datetime ) -> timedelta :
5050 return ZERO
5151
5252
5353utc = UTC ()
5454
5555
56- def dt_to_filetime (dt : datetime . datetime ) :
56+ def dt_to_filetime (dt : datetime ) -> int :
5757 """Converts a datetime to Microsoft filetime format. If the object is
5858 time zone-naive, it is forced to UTC before conversion.
5959
@@ -75,7 +75,7 @@ def dt_to_filetime(dt: datetime.datetime):
7575 return ft + (dt .microsecond * 10 )
7676
7777
78- def filetime_to_dt (ft : int ):
78+ def filetime_to_dt (ft : int ) -> datetime :
7979 """Converts a Microsoft filetime number to a Python datetime. The new
8080 datetime object is time zone-naive but is equivalent to tzinfo=utc.
8181
@@ -91,7 +91,7 @@ def filetime_to_dt(ft: int):
9191 # Get seconds and remainder in terms of Unix epoch
9292 (s , ns100 ) = divmod (ft - EPOCH_AS_FILETIME , HUNDREDS_OF_NANOSECONDS )
9393 # Convert to datetime object
94- dt = datetime .datetime . fromtimestamp (s , datetime . UTC )
94+ dt = datetime .fromtimestamp (s , timezone . utc )
9595 # Add remainder in as microseconds. Python 3.2 requires an integer
9696 dt = dt .replace (microsecond = (ns100 // 10 ))
9797 return dt
0 commit comments