Как лучше всего проверить, что c # DateTime - это минута, час, месяц и т. Д. - PullRequest
0 голосов
/ 12 февраля 2009

Мне нужно проверить, что 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;
}

Есть идеи по улучшению?

1 Ответ

7 голосов
/ 12 февраля 2009

(РЕДАКТИРОВАТЬ: IsMonth хорошо, потому что он сначала проверяет, что это просто дата.)

Возможно, вы захотите связать их вместе - например, ваш IsMinute, вероятно, должен проверять миллисекунды. Вместо того, чтобы добавить этот тест в IsHour, просто сначала выполните проверку IsHinute для IsHour. Цепочка проста:

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

Другой альтернативой может быть создание методов расширения:

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

Я бы определенно сделал их статичными в любом случае:)

...