2010-09-16 56 views

回答

15

僅記錄郵編輸入時間戳 到2秒精度。這個 反映了當創建PKZIP爲 時使用的DOS 時間戳的準確性。記錄在 Zip中的數字將被截斷, 不是最接近的2秒。

當您存檔和恢復文件時,它將不再有與原始文件精確匹配的時間戳 。此 超出了他的類似問題 與Java使用1毫秒 精度和Microsoft Windows使用 100納秒增量。 PKZIP 格式源自MS DOS天,因此 因此僅使用16位時間和012位16位數據作爲日期。在修訂後的 PKZIP格式中定義了 擴展時間戳,但Java不使用 它。

裏面的zip文件,日期和時間都存儲在 當地時間16位的,不 UTC這是常規,使用 古MS DOS格式。位0是 最不顯着的位。格式是 little-endian。在 的16位中沒有空間來準確地表示時間 甚至到第二個,所以秒數 字段包含的秒數除以 兩個,僅給出第二秒的精度。

這意味着文件 一個zip內的視時會突然由 一個小時用不同每次 你有夏令改變他們的 未壓縮的同行相比。它 也意味着一個zip實用程序將從 Zip會員日期提取與UTC時間不同的UTC時間,具體取決於計算完成的時區。 這太可笑了。 PKZIP格式需要現在基於UTC的時間戳 以避免 這些異常情況。

更糟糕的是,標準工具 像WinZip或PKZIP永遠一輪 的時間到下一個甚至第二 當他們恢復,從而有可能使 文件的一種第二兩個 秒年輕。在JDK(即 javaToDosTime在ZipEntry的舍入 時間下來,從而使文件一個 兩秒鐘以上。

的格式不支持日期 之前1980-01-01 0:00 UTC避免 文件日期1980-01-01或更早版本 (本地或UTC時間)。

等等!它變得更糟。菲爾卡茨, 當他記錄的Zip格式,沒有 沒有指定是否 當地時間檔案中使用 是日光或標準時間。

更糟糕的是關閉...信息-ZIP,JSE和 TrueZIP應用DST時間表(天 其中DST開始了,並且在任何給定的 止年度)將系統時間和DOS 日期間 時候,任何日期/時間。這是應該的。 Vista的資源管理器,7-Zip和WinZip 僅適用於DST儲蓄,但不適用 適用時間表。因此,他們在 轉換系統時間 和DOS日期/時間之間的任何日期時使用 當前的DST節省。這只是 馬虎。

http://mindprod.com/jgloss/zip.html

tar文件這麼好得多。