Быстрый анализ

Быстрый анализ

Я хочу установить дату создания на некоторых старых отсканированных фотографиях на 1970 год. Если я сделаю это с помощью стороннего инструмента, проводник Windows отобразит дату как пустую. Я думал, что NTFS может вернуться к 1600-м годам. Что происходит?

решение1

Быстрый анализ

При просмотре папок проводник Windows не отображает даты за пределами определенного диапазона:

Формат даты MS-DOS может отображать только даты между 1/1/1980 и 12/31/2107.

Источник:Функция 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, то вот что говорится в документации:

Авремя файла— это 64-битное значение, представляющее собой число 100-наносекундных интервалов, прошедших с 12:00 утра 1 января 1601 года по всемирному координированному времени (UTC). Система записывает время файлов, когда приложения создают, получают доступ и записывают файлы.

Файловая система NTFS хранит значения времени в формате UTC, поэтому на них не влияют изменения часового пояса или переход на летнее время. Файловая система FAT хранит значения времени на основе локального времени компьютера.

Источник:Время файла

дальнейшее чтение


Обходной путь

В некоторых случаях вы можете обойти эту проблему с помощьюЭКСИФтеги:

Скриншот 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-Зиптакже могут быть не затронуты:

Скриншот 4

Связанный контент