快速分析

快速分析

我想将一些旧扫描图片的创建日期设置为 1970 年的某个日期。如果我使用第三方工具执行此操作,Windows 资源管理器会将日期显示为空白。我以为 NTFS 可以回溯到 1600 年代。这是怎么回事?

答案1

快速分析

浏览文件夹时,Windows 资源管理器不会显示特定范围之外的日期:

MS-DOS 日期格式只能表示 1980 年 1 月 1 日至 2107 年 12 月 31 日之间的日期。

来源:FileTimeToDosDateTime 函数

可以通过手动设置日期来确认:

屏幕截图 1

我的假设是,这种行为与向后兼容性有关。当NTFS不存在,创建、修改和访问日期被设计为各占用 16 位(2 字节)。信息打包如下:

Bits | Description
-------------------------------------------------------
0–4  | Day (1-31)
5–8  | Month (1 = January, 2 = February, etc.)
9-15 | Year offset from 1980 (0 = 1980, 1 = 1981, etc.)

为了节省位数,年份不以整数形式存储,而是使用偏移量。由于有 7 位,这意味着2^7 = 128可能的值,即 1980-2107。

至于 NTFS,文档是这样说的:

A文件时间是一个 64 位值,表示自 1601 年 1 月 1 日凌晨 12:00(协调世界时,UTC)以来经过的 100 纳秒间隔数。系统会在应用程序创建、访问和写入文件时记录文件时间。

NTFS 文件系统以 UTC 格式存储时间值,因此不受时区或夏令时变化的影响。FAT 文件系统根据计算机的本地时间来存储时间值。

来源:文件时间

进一步阅读


解决方法

在某些情况下,你也许可以通过以下方式绕过此问题EXIF标签:

屏幕截图 2

文件属性对话框可以显示底层文件系统支持的任何日期:

屏幕截图 3

使用以下命令时命令行界面也是如此dir

01/01/1601  02:23 AM                 0 1-oldest.txt
01/01/1970  02:23 AM                 0 2-older.txt
01/01/1980  02:23 AM                 0 3-old.txt
01/01/2014  02:23 AM                 0 4-current.txt
01/01/2107  02:23 AM                 0 5-new.txt
01/01/9999  02:23 AM                 0 6-newer.txt

第三方程序如7-Zip也可能不受影响:

屏幕截图 4

相关内容