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 時間早くなっています。(IE 日付を午前 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 に答える