1

如果我在 ±5 小时的时区,这是有道理的,但我在 GMT -06:00,所以我不确定时区是我的问题还是其他问题。这是我正在使用的代码:

Private Sub SetFileTimes(file As String, Optional creationTime As Date, Optional accessTime As Date, Optional writeTime As Date)
    Dim handle As Long
    Dim sysCreationTime As FileTime, sysAccessTime As FileTime, sysWriteTime As FileTime
    Dim SECURITY_ATTRIBUTES As SecurityAttributes
    SECURITY_ATTRIBUTES.nLength = Len(SECURITY_ATTRIBUTES)
    SECURITY_ATTRIBUTES.lpSecurityDescriptor = 0
    SECURITY_ATTRIBUTES.bInheritHandle = False
    handle = CreateFile(file & Chr$(0), GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, SECURITY_ATTRIBUTES, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0&)
    Debug.Assert handle <> -1
    GetFileTime handle, sysCreationTime, sysAccessTime, sysWriteTime

    If creationTime <> 0 Then
        SystemTimeToFileTime GetSystemTime(creationTime), sysCreationTime
    End If
    If accessTime <> 0 Then
        SystemTimeToFileTime GetSystemTime(accessTime), sysAccessTime
    End If
    If writeTime <> 0 Then
        SystemTimeToFileTime GetSystemTime(writeTime), sysWriteTime
    End If

    SetFileTime handle, sysCreationTime, sysAccessTime, sysWriteTime
    CloseHandle handle
End Sub

Private Function GetSystemTime(datetime As Date) As SystemTime
    GetSystemTime.Year = Year(datetime)
    GetSystemTime.Month = Month(datetime)
    GetSystemTime.Day = Day(datetime)
    GetSystemTime.Hour = Hour(datetime)
    GetSystemTime.Minute = Minute(datetime)
    GetSystemTime.Second = Second(datetime)
    GetSystemTime.Milliseconds = 0
End Function

该功能有效,但我所有的时间都提前了 5 小时。(即如果我尝试将日期设置为上午 10 点,它会将其设置为上午 5 点。)默认时间(我没有指定的时间)不会按预期更改。在调试时,我可以看到SystemTimeToFileTime返回的值小于应有的值。我能做些什么来解决这个问题?

4

3 回答 3

3

在夏令时期间,芝加哥(通常为 GMT-06)为 GMT-05。

编辑:添加到FileTimeToLocalTime的链接。

于 2011-06-21T16:28:16.927 回答
2

这是预期的行为。如前所述,在考虑 DST 时,关闭 5 小时是有意义的。文件时间以 UTC 格式存储,因此与您当前的时区会有偏移。

看来您正确使用了设置文件时间的功能:http: //msdn.microsoft.com/en-us/library/ms724205 (VS.85).aspx

如果需要,您可以使用FileTimeToLocalTime对您的本地时区进行适当的调整。

于 2011-06-21T16:39:19.687 回答
0

您的 creationTime 和其他输入变量设置为多少?您的 GetSystemTime() 正在根据这些创建时间,并且不清楚返回的时间是否为 UTC 格式。

SystemTimeToFileTime 的文档声明时间必须为 UTC 格式

http://msdn.microsoft.com/en-us/library/ms724948(VS.85).aspx

我怀疑您的代码中的某个地方没有处理这种转换。

于 2011-06-21T16:29:28.870 回答