VBA Scipting FileSystemObject, возвращающий разное время - PullRequest
0 голосов
/ 06 ноября 2018

У меня проблема с возвратом DateCreated файла, например:

Set fsoFile = CreateObject("Scripting.FileSystemObject")
Set File = fsoFile.GetFile([Path] & [Filename])
debug.print File.DateCreated

а время его возвращения на час раньше, чем в Windows Explorer?

Я не знаю, было ли когда-либо изменено Системное время или был ли период времени, когда системное время было неправильным, но сейчас оно определенно верно.

Кто-нибудь знает, что это может быть / была похожая проблема?

Спасибо

1 Ответ

0 голосов
/ 06 ноября 2018

Может быть, вы находитесь в Европе?

Официальная документация Структура FILETIME гласит, что NTFS хранит даты файлов как UTC время, таким образом (в настоящее время) один час от вашего местного времени.

Текущее время UTC можно найти следующим образом:

    Public Type SystemTime
        wYear                           As Integer
        wMonth                          As Integer
        wDayOfWeek                      As Integer
        wDay                            As Integer
        wHour                           As Integer
        wMinute                         As Integer
        wSecond                         As Integer
        wMilliseconds                   As Integer
    End Type

' Returns the current UTC time.
Private Declare PtrSafe Sub GetSystemTime Lib "kernel32" ( _
    ByRef lpSystemTime As SystemTime)

' Retrieves the current date and time from the local computer as UTC.
' By cutting off the milliseconds, the resolution is one second to mimic Now().
'
' 2016-06-09. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function UtcNow() As Date

    Dim SysTime     As SystemTime
    Dim Datetime    As Date

    ' Retrieve current UTC date/time.
    GetSystemTime SysTime

    Datetime = _
        DateSerial(SysTime.wYear, SysTime.wMonth, SysTime.wDay) + _
        TimeSerial(SysTime.wHour, SysTime.wMinute, SysTime.wSecond)

    UtcNow = Datetime

End Function

Затем используйте DateDiff ("n", UtcNow, Now), чтобы найти разницу между временем UTC и местным временем, и затем добавьте это к найденному времени файла.

...