|
From: <no...@tc...> - 2025-09-08 15:48:52
|
Automated mail by fx, on behalf of no...@tc... Ticket Change [41addde9c352b1ac2257c2762bf736e8a5f7a7cd9e62b4ee6b9013cbcee66df4] [Add proc zipfile::decode::filetime] By anonymous For Tcllib On 2025-09-08T15:37:31.558 Details https://core.tcl-lang.org/tcllib/tinfo?name=41addde9c352b1ac2257c2762bf736e8a5f7a7cd9e62b4ee6b9013cbcee66df4 Ticket https://core.tcl-lang.org/tcllib/tktview/4a404d7bddc5925472adf77018bc1085c89e0f4d Changed Fields assignee: nobody closer: nobody comment: Add new proc filetime to retrieve the modification date and time of ZIP file contents. The following implementation works for me: ``` proc ::zipfile::decode::filetime {zdict src} { array set _ $zdict array set f $_(files) if {![info exists f($src)]} { Error "File \\"$src\\" not known" BAD PATH } array set fd $f($src) # Definitions of DOSDate and DOSTime. # DOSDate: # Bits 0-4 : Day of the month (1-31) # Bits 5-8 : Month (January = 1, February = 2, ...) # Bits 9-15: Year offset from 1980 (add 1980 to get actual year) # DOSTime: # Bits 0-4 : Second divided by 2 # Bits 5-10 : Minute (0-59) # Bits 11-15: Hour (0-23) set sec [expr {(($fd(lmft) << 1) & 0x3E) }] set min [expr {(($fd(lmft) >> 5) & 0x3F) }] set hour [expr {(($fd(lmft) >> 11) & 0x1F) }] set day [expr {(($fd(lmfd)) & 0x1F) }] set mon [expr {(($fd(lmfd) >> 5) & 0x0F) }] set year [expr {(($fd(lmfd) >> 9) & 0x7F) }] incr year 1980 set dateStr [format "%d-%d-%d %d:%d:%d" $year $mon $day $hour $min $sec] set date [clock scan $dateStr -format "%Y-%m-%d %H:%M:%S"] return $date } ``` foundin: 0.10.1 is_private: 0 login: anonymous priority: 5 Medium resolution: None severity: Minor status: Open submitter: anonymous subsystem: zip title: Add proc zipfile::decode::filetime type: RFE ------------------------------------------------------------ See Tcl/Tk development @ http://core.tcl-lang.org/ ------------------------------------------------------------ |