Проблема следующая:
При вызове FileTimeToLocalFileTime время создания фалов в летний период смещается на час.
Если использовать связку
FileTimeToSystemTime
SystemTimeToTzSpecificLocalTime
SystemTimeToFileTime
все отрабатывает нормально.
Если файл создан в зимнее время, при переходе на летнее — дата создания файла тоже сдвигается на час.
Создаем файл 2 декабря в 19.43, меняем дату на 2 июня — смотрим в TotalCommander (или в проводнике -значения не имеет) — 20.43
Если йал был создан в 23.45, к примеру, соотвественно даже число отображается не верно (3.06 00.45)
В MSDN http://msdn.microsoft.com/en-us/library/ms724277(VS.85).aspx
про это все написано
Суть в том, что время файла в файловой системе NTFS хранится в UTC. Читай по зимнему времени Лондона.
Отсюда всё описываемое поведение.
На FAT время всегда хранится в локальном времени.
_>Неужели ошибка в FileTimeToLocalFileTime?
Re[2]: FileTimeToLocalFileTime дает некоректное летнее время
Здравствуйте, MShura, Вы писали:
MS>В MSDN http://msdn.microsoft.com/en-us/library/ms724277(VS.85).aspx MS>про это все написано MS>Суть в том, что время файла в файловой системе NTFS хранится в UTC. Читай по зимнему времени Лондона. MS>Отсюда всё описываемое поведение.
Это я осознаю Но получается, как я показывал в примере, странная вещь.
Ведь если мы создали файл 2.12 в 23.45, то и при просмотре летом информаци об этом файле дата его создания все равно должна быть 2.12 в 23.45, а свойства файлов Windows отображают 03.12 в 00.45 !!!!!
MS>На FAT время всегда хранится в локальном времени.
Да. Проблема проявляется только на NTFS
Re[3]: FileTimeToLocalFileTime дает некоректное летнее время
prog_san пишет:
> Ведь если мы создали файл 2.12 в 23.45, то и при просмотре летом > информаци об этом файле дата его создания все равно должна быть 2.12 в > 23.45, а свойства файлов Windows отображают 03.12 в 00.45 !!!!!
если бы оно было на фат — да, так и было бы
а на нтфс оно хранится как скажем 2.12 в 21.45 GMT+0
летом у нас GMT+3, зимой GMT+2
соответственно летом все даты на час больше, тк прибавляется 1 лишний
час из-за смены таймзоны.
> Да. Проблема проявляется только на NTFS
посмотри как элегантно с этим расправился тотал коммандер
Здравствуйте, prog_san, Вы писали:
_>Неужели ошибка в FileTimeToLocalFileTime?
Читайте MSDN, там все написано!!!
FileTimeToLocalFileTime
FileTimeToLocalFileTime uses the current settings for the time zone and daylight saving time. Therefore, if it is daylight saving time, this function will take daylight saving time into account, even if the time you are converting is in standard time. You can use the following sequence of functions as an alternative.
и далее Ваша последовательность функций.
Чтобы сделать конвертацию UTC <-> Local нужно знать DST для данного момента времени.
Функция SystemTimeToTzSpecificLocalTime вычисляет DST для указанного момента времени (по параметрам из TIME_ZONE_INFORMATION).
Функция FileTimeToLocalFileTime берет DST текущего момента времени.
Такое поведение функции объявлено как by design.
Имею скафандр — готов путешествовать!
Re[4]: FileTimeToLocalFileTime дает некоректное летнее время
MSDN я читал и знаю как ведут себя функции. Я говорю о том, что в свойствах файлов создателям Windows (и TotalCommander при отображении времени) необходимо было учесть такое поведение. Ведь если файл был создан 02.12 в 23.45 он и при просмотре в летнее время время его создания должно отображаться как 02.12 в 23.45, а не 03.12 в 00.45.
Здравствуйте, Роман Дубров, Вы писали:
РД>посмотри как элегантно с этим расправился тотал коммандер