Как лучше всего проверить, что AC# DateTime - это минута, час, месяц и т. Д.

StackOverflow https://stackoverflow.com/questions/542915

  •  23-08-2019
  •  | 
  •  

Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top