2011-06-21 21 views
1

私が±5時間のタイムゾーンにいたのであれば意味がありますが、GMT-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形式であるかどうかは不明です。

時間がUTC形式で

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

でなければならないことSystemTimeToFileTime状態のためのドキュメント私は、この変換は、あなたのコードのどこかで処理されていないと思われます。

2

これは予期された動作です。注意したように、DSTでの入力時に5時間遅れていることは意味があります。ファイル時間はUTC形式で保存されるため、現在のタイムゾーンからのオフセットがあります。

あなたが正しくファイルの時間を設定するための関数を使用していることが表示されます:http://msdn.microsoft.com/en-us/library/ms724205(VS.85).aspx

あなたが望む場合は、あなたの地域のタイムゾーンに適切な調整を行うためにFileTimeToLocalTimeを使用することができます。

関連する問題