FileTimeToLocalFileTime дает некоректное летнее время
От: prog_san Россия www.mhtunpack.narod.ru
Дата: 02.12.08 20:34
Оценка:
Проблема следующая:
При вызове FileTimeToLocalFileTime время создания фалов в летний период смещается на час.
Если использовать связку
FileTimeToSystemTime
SystemTimeToTzSpecificLocalTime
SystemTimeToFileTime
все отрабатывает нормально.

Если файл создан в зимнее время, при переходе на летнее — дата создания файла тоже сдвигается на час.
Создаем файл 2 декабря в 19.43, меняем дату на 2 июня — смотрим в TotalCommander (или в проводнике -значения не имеет) — 20.43
Если йал был создан в 23.45, к примеру, соотвественно даже число отображается не верно (3.06 00.45)

Неужели ошибка в FileTimeToLocalFileTime?
filetimetolocalfiletime
Re: FileTimeToLocalFileTime дает некорректное летнее время
От: prog_san Россия www.mhtunpack.narod.ru
Дата: 02.12.08 20:39
Оценка:
Забыл добавить, что эксперименты ставил на WindowsXP sp2
Re: FileTimeToLocalFileTime дает некоректное летнее время
От: MShura  
Дата: 02.12.08 21:14
Оценка:
В MSDN http://msdn.microsoft.com/en-us/library/ms724277(VS.85).aspx
про это все написано
Суть в том, что время файла в файловой системе NTFS хранится в UTC. Читай по зимнему времени Лондона.
Отсюда всё описываемое поведение.
На FAT время всегда хранится в локальном времени.

_>Неужели ошибка в FileTimeToLocalFileTime?
Re[2]: FileTimeToLocalFileTime дает некоректное летнее время
От: prog_san Россия www.mhtunpack.narod.ru
Дата: 03.12.08 07:07
Оценка:
Здравствуйте, 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 дает некоректное летнее время
От: Роман Дубров Украина Я@Blogspot
Дата: 03.12.08 11:59
Оценка:
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


посмотри как элегантно с этим расправился тотал коммандер
Posted via RSDN NNTP Server 2.1 beta
http://www.linkedin.com/in/romandubrov .::. http://roman-dubrov.blogspot.com/ .::. http://www.flickr.com/photos/romandubrov/
Re: FileTimeToLocalFileTime дает некоректное летнее время
От: rus blood Россия  
Дата: 03.12.08 12:25
Оценка:
Здравствуйте, 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 дает некоректное летнее время
От: prog_san Россия www.mhtunpack.narod.ru
Дата: 03.12.08 20:07
Оценка:
MSDN я читал и знаю как ведут себя функции. Я говорю о том, что в свойствах файлов создателям Windows (и TotalCommander при отображении времени) необходимо было учесть такое поведение. Ведь если файл был создан 02.12 в 23.45 он и при просмотре в летнее время время его создания должно отображаться как 02.12 в 23.45, а не 03.12 в 00.45.

Здравствуйте, Роман Дубров, Вы писали:

РД>посмотри как элегантно с этим расправился тотал коммандер


В чем элегантность?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.