2011-06-21 18 views
1

如果我在±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返回的值比它應該小。我能做些什麼來解決這個問題?

+2

當考慮到DST時,關閉5小時可能會有意義。 – jncraton

+0

這是一個非常好的點 - 我知道我沒有想到的東西。我該如何彌補?我正在處理的(相當老的)例子並沒有做到這一點。 – dlras2

回答

3

在夏令時期間,芝加哥(通常是GMT-06)是GMT-05。

編輯添加鏈接到FileTimeToLocalTime

+2

作爲一名程序員,我期待着每一個人只使用UTC的一天! – dlras2

0

什麼是您的creationTime和其他輸入變量設置爲?你的GetSystemTime()正在創建一個基於這些的時間,並且不清楚返回的時間是否是UTC格式。

爲SystemTimeToFileTime狀態的文檔的時間必須在UTC格式

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

我懷疑這種轉換不是在你的代碼的某個地方被處理。

相關問題