ZIP文件格式支持的最早时间戳值是多少?

时间:2010-09-16 10:15:05

标签: zip specifications file-format

我正在尝试将日期存储为ZIP文件中的最新修改时间戳。似乎ZIP格式仅支持1980-01-01之后的日期作为最后修改时间(至少通过Java API java.util.zip.ZipEntry

这是对的吗?最早支持的修改时间戳真的是1980-01-01 00:00:00吗?我试图找到一些参考来验证这一点,但我找不到任何。

1 个答案:

答案 0 :(得分:15)

  

仅记录Zip条目时间戳   两个2秒的精度。这个   反映了DOS的准确性   PKZIP时使用的时间戳   创建。这个数字记录在   Zip将被截断的时间戳,   不是最近的2秒。

     

归档和恢复文件时,   它将不再有时间戳   精确匹配原件。这个   超出他类似的问题   使用Java使用1毫秒   精度和Microsoft Windows使用   100纳秒增量。 PKZIP   格式源自MS DOS天和   因此只使用16位时间和   日期为16位。有一个定义   延长时间戳在修订版中   PKZIP格式,但Java不使用   它

     

内部zip文件,日期和时间   以16位存储在本地时间,而不是   UTC是常规的,使用   古老的MS DOS格式。位0是   最不重要的一点。格式是   小端。没有空间   16位准确表示时间   甚至到第二个,所以秒   字段包含秒除以   二,只给予均匀的准确性   第二

     

这意味着文件的明显时间   拉链里面会突然有所不同   一个小时与他们相比   每次都是未压缩的同行   你有夏令时的变化。它   也意味着一个zip实用程序会   从a中提取不同的UTC时间   Zip成员日期取决于哪个   时区计算完成了。   这是荒唐的。 PKZIP格式需要   一个现代的基于UTC的时间戳,以避免   这些异常。

     

更糟糕的是,标准工具   像WinZip或PKZIP将永远圆   到下一秒甚至秒的时间   当他们恢复时,可能   使文件一秒到两秒   再小一点。 JDK(即   ZipEntry中的javaToDosTime舍入   时间缩短,从而使文件成为一个   到了两秒钟。

     

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

     

等待!情况变得更糟。菲尔卡茨,   当他记录Zip格式时,做了   不费心去指定是否   存档中使用的本地时间应该是   是白天或标准时间。

     

并取消它...信息ZIP,JSE和   TrueZIP应用DST计划(天数   在任何给定的DST开始和结束的地方   转换时的任何日期)   系统时间和DOS之间的时间   约会时间。这是应该的。   Vista的资源管理器,7-Zip和WinZip   仅适用于DST节省,但不能   应用时间表。所以他们使用了   任何日期的当前DST节省   在系统时间之间转换时间   和DOS日期/时间。这只是   马虎。

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

tar文件所以更好。