0

DateTime がさまざまな単位の時間単位の先頭にあることをテストする必要があります。これは私が今使っているコードです:

/// ignoring milliseconds all the way down

bool IsMinute(DateTime dt)
{
  return dt.Second == 0;
}

bool IsHour(DateTime dt) 
{
  return dt.Second == 0 && dt.Minute == 0;
}  

bool IsDay(DateTime dt) 
{
  return dt.Date == dt;
}

bool IsMonth(DateTime dt) 
{
  return dt.Date == dt && dt.Day == 1;
}

bool IsYear(DateTime dt) 
{
  return dt.Date == dt && dt.DayOfYear == 1;
}

改善のためのアイデアはありますか?

4

1 に答える 1

7

(編集: IsMonth は最初に日付であることを確認するので問題ありません。)

これらを一緒に連鎖させたい場合があります-たとえば、IsMinute はおそらくミリ秒をチェックする必要があります。そのテストを IsHour にも追加するのではなく、最初に IsHour が IsMinute をチェックするようにします。連鎖は簡単です:

bool IsHour(DateTime dt) 
{
    return IsMinute(dt) && dt.Minute == 0;
}

別の方法として、それらを拡張メソッドにすることもできます。

public static bool IsHour(this DateTime dt) 
{
    return dt.IsMinute() && dt.Minute == 0;
}

私は間違いなくそれらをどちらの方法でも静的にします:)

于 2009-02-12T19:48:18.140 に答える