実行可能ファイルの「LastWriteTime」を取得し、設定した内部DateTimeと比較しています。LastWriteTimeが内部DateTime以下の場合、データベースから2つのテーブルをクリアします。
このコードは、太平洋時間帯で私に最適です。ただし、ユーザーが別のタイムゾーンにいる場合(たとえば、私の4時間前)、「LastWriteTime」はタイムゾーンに変換された時間を返すため、機能しません。たとえば、「12/12/2012 8:38:12 AM」の値を探していますが、4時間進んでいる場合、この値は自動的に「12/12/201212:38:12」に変更されます。彼らのシステムのPM」。
誰かがコードで何を変更して異なるタイムゾーンを考慮に入れるべきかを教えてもらえますか?「LastWriteTime」と「build2023_EXE_Date」変数は両方とも同じ日付/時刻を返すので、2つの日付/時刻値の比較はしません」エンドユーザーがどのタイムゾーンにいるかに関係なく失敗しますか?
.Net4.xではなく.NET3.5を使用しています
//http://stackoverflow.com/questions/1600962/displaying-the-build-date
string w_file = "MyEXE.exe";
string w_directory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) +
Path.DirectorySeparatorChar + "MyEXE";
DateTime currentExeTime = File.GetLastWriteTime(System.IO.Path.Combine(w_directory, w_file));
DateTime build2023_EXE_Date = new DateTime(2012, 12, 12, 8, 38, 12); //"12/12/2012 8:38:12 AM"
//We need to truncate the millisecond time off of the EXE LastWriteTime
//or else when we compare to our internal DateTime build2323_EXE_Date value,
//it will not match
//http://stackoverflow.com/questions/1004698/how-to-truncate-milliseconds-off-of-a-net-datetime
currentExeTime = new DateTime(
currentExeTime.Ticks - (currentExeTime.Ticks % TimeSpan.TicksPerSecond),
currentExeTime.Kind
);
if (currentExeTime <= build2023_EXE_Date) //If previous build matches or is before the Build 2023 date then clear these two tables.
{
//This will fail the comparision if the user is in a different time zone than me.
//Clear tables
}