Как лучше всего проверить, что AC# DateTime - это минута, час, месяц и т. Д.
Вопрос
Мне нужно проверить, что 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;
}
Есть идеи для улучшений?
Решение
(РЕДАКТИРОВАТЬ: Имонт в порядке, потому что сначала проверяет, что это просто дата.)
Возможно, вы захотите объединить их вместе - например, ваш Isminute, вероятно, должен проверить на миллисекунд. Вместо того, чтобы добавить этот тест на Ишур, просто сделайте 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;
}
Я бы определенно сделал их статичными в любом случае :)
Не связан с StackOverflow