私が±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
が値よりも小さい値を返すことがわかります。これを修正するにはどうすればよいですか?
DSTでの入力時に5時間遅れていると意味があります。 – jncraton
これは非常に良い点です。私は何かを考えていないことを知っていました。どのように私は両方を補うことができますか?私が取り組んでいる(かなり古い)例はこれを何もしません。 – dlras2