如果我在±5小時的時區,但我在格林威治標準時間-06:00,所以我不確定時區是否是我的問題或者是否是別的。這裏是我正在使用的代碼:爲什麼我的SystemTimeToFileTime返回一個5小時關閉的結果?
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個小時。 (I.E.如果我嘗試將日期設置爲上午10點,它會將其設置爲上午5點。)默認時間(我不指定的時間)不會更改,如預期的那樣。在調試時,我可以看到SystemTimeToFileTime
返回的值比它應該小。我能做些什麼來解決這個問題?
當考慮到DST時,關閉5小時可能會有意義。 – jncraton
這是一個非常好的點 - 我知道我沒有想到的東西。我該如何彌補?我正在處理的(相當老的)例子並沒有做到這一點。 – dlras2