如果我在 ±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
返回的值小于应有的值。我能做些什么来解决这个问题?