ZIP-Zeitstempel werden nur zu zwei 2 Sekunden Genauigkeit aufgezeichnet. Diese spiegelt die Genauigkeit von DOS Zeitstempel in Verwendung, wenn PKZIP erstellt wurde. Diese Nummer in der Zip aufgezeichnet wird der Zeitstempel abgeschnitten, nicht die nächsten 2 Sekunden.
Wenn Sie eine Datei archivieren und wiederherstellen, wird kein Timestamp mehr genau das Original entsprechen. Diese ist darüber hinaus er ähnliches Problem mit Java mit 1 Millisekunde Präzision und Microsoft Windows mit 100-Nanosekunden-Schritten. PKZIP Format leitet sich von MS DOS Tage und daher verwendet nur 16 Bits für die Zeit und 16 Bits für das Datum. Im überarbeiteten PKZIP-Format ist ein erweiterter Zeitstempel definiert, aber Java verwendet es nicht.
Innen Zip-Dateien, Daten und Zeiten sind in 16 Bits in Ortszeit gespeichert, nicht UTC wie es üblich sind, ein altes MS-DOS-Format. Bit 0 ist das am wenigsten signifikante Bit . Das Format ist Little-Endian. Es gab keinen Platz in 16 Bit zur genauen Darstellung der Zeit sogar auf die zweite, so dass die Sekunden Feld enthält die Sekunden durch zwei geteilt, Genauigkeit geben nur die gerade Sekunde.
Das bedeutet, die scheinbare Zeit von Dateien in einem zip wird von eine Stunde im Vergleich zu ihren Pendants unkomprimierten jedes Mal Sie haben eine Sommer Veränderung plötzlich unterscheiden. Es bedeutet auch, dass die eine Zip-Dienstprogramm eine andere UTC-Zeit aus einem Zip Mitgliedsdatum extrahiert, je nachdem, welche Zeitzone die Berechnung durchgeführt wurde. Das ist lächerlich. Das PKZIP-Format benötigt einen modernen UTC-basierten Zeitstempel, um diese Anomalien zu vermeiden.
Erschwerend kommt hinzu, Standard-Tools wie WinZip oder PKZIP wird immer rund die Zeit bis zum nächsten geraden zweiten , wenn sie wieder herzustellen, wodurch möglicherweise die Datei einer Sekunde zwei Sekunden jünger zu machen. Das JDK (dh javaToDosTime in ZipEntry rundet die Zeit nach unten, wodurch die Datei ein bis zwei Sekunden alt sind.
Das Format unterstützt keine Termine vor 1980-01-01 0:00 UTC. Vermeiden Sie Dateidaten 1980-01-01 oder früher (lokale oder UTC-Zeit).
Warten! Es wird noch schlimmer. Phil Katz, als er das Zip-Format dokumentierte, tat nicht die Mühe, anzugeben, ob die Ortszeit, die im Archiv verwendet wurde, Tages- oder Standardzeit sein sollte.
Und es zu krönen ... Info-ZIP, JSE und TrueZIP den DST-Zeitplan gelten (Tage wo DST begann und endete in einem bestimmten Jahr) für jeden Tag, an Zeiten zwischen Systemzeit und DOS Umwandlung Datum /Zeit. Das ist so, wie es sein sollte. Vista Explorer, 7-Zip und WinZip wenden nur die Sommerzeit-Einsparungen an, aber nicht den Zeitplan anwenden. So verwenden sie die aktuellen DST Einsparungen für jedes Datum, wenn Konvertierungszeiten zwischen Systemzeit und DOS-Datum/Uhrzeit. Dies ist nur schlampig.