@@ -396,6 +396,9 @@ class ZipInfo:
396396 'file_size' ,
397397 '_raw_time' ,
398398 '_end_offset' ,
399+ 'extended_mtime' ,
400+ 'extended_atime' ,
401+ 'extended_ctime' ,
399402 )
400403
401404 def __init__ (self , filename = "NoName" , date_time = (1980 ,1 ,1 ,0 ,0 ,0 )):
@@ -431,6 +434,9 @@ def __init__(self, filename="NoName", date_time=(1980,1,1,0,0,0)):
431434 self .compress_size = 0 # Size of the compressed file
432435 self .file_size = 0 # Size of the uncompressed file
433436 self ._end_offset = None # Start of the next local header or central directory
437+ self .extended_mtime = None # Extended access timestamp
438+ self .extended_atime = None # Extended modified timestamp
439+ self .extended_ctime = None # Extended changed timestamp
434440 # Other attributes are set by class ZipFile:
435441 # header_offset Byte offset to the file header
436442 # CRC CRC-32 of the uncompressed file
@@ -563,6 +569,14 @@ def _decodeExtra(self, filename_crc):
563569 except UnicodeDecodeError as e :
564570 raise BadZipFile ('Corrupt unicode path extra field (0x7075): invalid utf-8 bytes' ) from e
565571
572+ elif tp == 0x5455 :
573+ flags = extra [4 ]
574+ if flags & 0x1 and ln >= 5 :
575+ self .extended_mtime = int .from_bytes (extra [5 :9 ], "little" )
576+ if flags & 0x2 and ln >= 9 :
577+ self .extended_atime = int .from_bytes (extra [9 :13 ], "little" )
578+ if flags & 0x4 and ln >= 13 :
579+ self .extended_ctime = int .from_bytes (extra [13 :17 ], "little" )
566580 extra = extra [ln + 4 :]
567581
568582 @classmethod
0 commit comments