±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
デバッグ中に、本来あるべき値よりも少ない値を返していることがわかります。これを修正するにはどうすればよいですか?