
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.86] |
![]() |
|
Сообщ.
#1
,
|
|
|
Возвращает всегда одно и то же время создания файла, или возможны отклонения с учётом летнего времени?
|
Сообщ.
#2
,
|
|
|
Функция GetFileTime в языке программирования Visual Basic возвращает время создания файла в формате UTC (координированного всемирного времени) без учета летнего времени (DST - Daylight Saving Time). Это означает, что она не учитывает переходы на летнее время и стандартное время в различных часовых поясах.
Если вам требуется учесть летнее время (DST) при получении времени создания файла, вам может понадобиться дополнительная обработка и конвертация времени. Например, вы можете использовать функции, такие как GetTimeZoneInformation и SystemTimeToTzSpecificLocalTime, для преобразования времени из UTC в местное время с учетом летнего времени. Пример преобразования времени из UTC в местное время с учетом летнего времени в Visual Basic: ![]() ![]() Dim fileTime As FILETIME ' Здесь происходит получение времени создания файла с помощью GetFileTime и сохранение его в fileTime ' Получение информации о часовом поясе Dim timeZoneInfo As TIME_ZONE_INFORMATION GetTimeZoneInformation timeZoneInfo ' Преобразование времени из UTC в местное время с учетом летнего времени Dim localFileTime As FILETIME FileTimeToLocalFileTime fileTime, localFileTime Dim localSystemTime As SYSTEMTIME FileTimeToSystemTime localFileTime, localSystemTime Dim localTime As Date SystemTimeToTzSpecificLocalTime timeZoneInfo, localSystemTime, localTime ' Теперь localTime содержит местное время с учетом летнего времени Обратите внимание, что поддержка летнего времени зависит от операционной системы и настроек компьютера, на котором выполняется код. |
Сообщ.
#3
,
|
|
|
Мне-то как раз нужно постоянное значение, записанное в данные файловой системы. Я где-то читал, что на FAT-разделах она берёт время из какого-то кеша, которое может меняться с учётом летнего. Плюс у меня есть старая прога, где в комментах после GetFileTime написано: если был переход на летнее время, то выполняем такой-то код. А почему я это написал - то ли для подстраховки, то ли она реально со временем балуется - уж не помню. Потому и спрашиваю, ибо в инете много чего понаписано.
|
Сообщ.
#4
,
|
|
|
Вот я снова возвращаюсь к вопросу, ибо возникли проблемы при переходе на летнее время. Нужно получить время UTC создания папки (папка на FAT32 - возвращается местное время, проверка на файл. систему в коде пока что отсутствует - хорошо бы было получать просто значение, записанное в файл. системе - без всяких конвертаций). Код не сработал:
![]() ![]() Public Function GetFolderCreateTime(NameFolder As String, Out_CreationFT As FILETIME) As Double Dim hFolder As Long, FT As FILETIME, lRet As Long GetFolderCreateTime = -1 hFolder = CreateFile(NameFolder, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_DELETE, 0&, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0&) If hFolder = INVALID_HANDLE_VALUE Then Exit Function End If lRet = GetFileTime(hFolder, Out_CreationFT, FT, FT) If lRet = 0 Then Exit Function End If 'если FAT32 lRet = LocalFileTimeToFileTime(Out_CreationFT, FT) If lRet = 0 Then Exit Function End If Out_CreationFT = FT End Function |
Сообщ.
#5
,
|
|
|
м.б. зависит ещё от Windows? WinXP, например, делает конвертацию в местное время, а Win10 - нет?
|