0

実行可能ファイルの「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
}
4

2 に答える 2

4

日付を現地時間で保持する必要がある場合や、タイムゾーンを関連付ける必要がある場合を除いて、代わりにユニバーサル時間を使用することをお勧めします。これにより、日付はすべて正常に比較されるため、作業がはるかに簡単になり、実際にはパフォーマンスが向上する可能性があります(DateTime.Now.NET呼び出しを要求DateTime.UtcNowしてから、現地時間に対して比較的費用のかかる調整を実行する場合)。

もう1つのオプションは、を使用することDateTimeOffsetです。これは、オフセット付きの日付を格納し(タイムゾーンではありません! -たとえば、DSTは異なるオフセットを提供します)、ユニバーサルと同じくらい簡単に比較できDateTimeます。残念ながら、GetLastWriteTime使用しないDateTimeOffsetので、これはうまくいかないかもしれません。

于 2012-12-21T17:33:55.623 に答える
1

DateTime ToUniversalTime()メソッドを使用する

于 2012-12-21T17:34:05.427 に答える