プログラムを作成して、テストする時に月末にしたいとか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ファイルに設定するようにしたり、パッケージ実行中に隠しメニューとして現在日をいつでも変更できるようにしています。

この記事が気に入ったら
フォローしよう

最新情報をお届けします

おすすめの記事