No, the problem occurs because Win32 and .NET make different choices with regard to dealing with Daylight Saving Time. For a discussion, see here: http://blogs.msdn.com/oldnewthing/archive/2003/10/24/55413.aspx To compensate, you have to adjust the time you use with SetLastWriteTime and GetLastWriteTime. When setting, adjust from .Net to Win32. When getting, adjust from Win32 to .NET. Here's some example code:
// If I have a time in the .NET environment, and I want to use it for
// SetWastWriteTime() etc, then I need to adjust it for Win32.
static DateTime AdjustTime_DotNetToWin32(DateTime time)
{
DateTime adjusted = time;
if (DateTime.Now.IsDaylightSavingTime() && !time.IsDaylightSavingTime())
adjusted = time - new System.TimeSpan(1, 0, 0);
else if (!DateTime.Now.IsDaylightSavingTime() && time.IsDaylightSavingTime())
adjusted = time + new System.TimeSpan(1, 0, 0);
return adjusted;
}
// If I read a time from a file with GetLastWriteTime() (etc), I need
// to adjust it for display in the .NET environment.
static DateTime AdjustTime_Win32ToDotNet(DateTime time)
{
DateTime adjusted = time;
if (DateTime.Now.IsDaylightSavingTime() && !time.IsDaylightSavingTime())
adjusted = time + new System.TimeSpan(1, 0, 0);
else if (!DateTime.Now.IsDaylightSavingTime() && time.IsDaylightSavingTime())
adjusted = time - new System.TimeSpan(1, 0, 0);
return adjusted;
}
void MySetLastWriteTime(String targetFile, DateTime t)
{
DateTime adjusted = AdjustTime_DotNetToWin32(t);
System.IO.File.SetLastWriteTime(targetFile, adjusted);
}
DateTime MyGetLastWriteTime(String targetFile)
{
DateTime t = System.IO.File.GetLastWriteTime(targetFile);
return AdjustTime_Win32ToDotNet(t);
}