プログラムを作成して、テストする時に月末にしたいとか3ヶ月前にしたいとかありませんか?OSの日付を直接変えてもいいのですが、私は戻し忘れることがあったのでちょっとしたクラスを作成しています。
このクラス(UDateTime)の代表的な静的プロパティは、TodayとNowです。
通常のDateTime型をちょっとラップしたクラスです。
Static変数
#region Static変数
public static int ChageType = 0;
public static DateTime FakeToday = DateTime.MinValue;
public static int AddMonth = -12;
#endregion
CangeTypeにどういう変換をするのかを持たせています。。
1:何か月前、もしくは後を指定する。
2:テスト日を直接指定する
Today プロパティ
public static DateTime Today
{
get {
if (!Debugger.IsAttached){
return DateTime.Today;
}
var dtDate = DateTime.Today;
switch (ChageType){
case 1:
dtDate = DateTime.Today.AddMonths(AddMonth);
break;
case 2:
dtDate = FakeToday;
break;
}
return dtDate;
}
}
Now プロパティ
public static DateTime Now
{
get {
if (!Debugger.IsAttached){
return DateTime.Now;
}
var dtDate = DateTime.Now;
switch (ChageType){
case 1:
dtDate = DateTime.Now.AddMonths(AddMonth);
break;
case 2:
DateTime dtNow = DateTime.Now;
dtDate = new DateTime(FakeToday.Year, FakeToday.Month, FakeToday.Day, dtNow.Hour, dtNow.Minute, dtNow.Second, dtNow.Millisecond);
break;
}
return dtDate;
}
}
実際の使い方はこんな感じ
// 納期のチェック(追加時のみ)
if (!row.IsNull(Def受注明細.納期)){
DateTime dt納期 = DBA.GetValueDateTime(row, Def受注明細.納期);
if (dt納期 < UDateTime.Today){
row.SetColumnError(Def受注明細.納期 , CmnDefine.ValueMessage過去日);
}
}
私は、Configファイルに設定するようにしたり、パッケージ実行中に隠しメニューとして現在日をいつでも変更できるようにしています。