Я делаю сравнение DateTime, но я не хочу делать сравнение во втором, миллисекунде и уровне галочек. Каков самый изящный путь?
Если я просто сравниваю DateTime, то они редко равны из-за различий в галочках.
А как насчет использования временного интервала.
if (Math.Truncate((A - B).TotalMinutes) == 0)
{
//There is less than one minute between them
}
Вероятно, не самый элегантный способ, но он позволяет использовать случаи, которые разделены на одну секунду, но при этом имеют разные части дней / часов / минут, например, переход в полночь.
Правка : мне пришло в голову, что усечение не нужно ...
if (Math.Abs((A - B).TotalMinutes) < 1)
{
//There is less than one minute between them
}
Лично я думаю, что это более элегантно ...
Вы можете преобразовать их в формат String и сравнить строки друг с другом.
Это также дает свободу выбора параметров сравнения, например, только время без даты и т. Д.
if (String.Format("{0:ddMMyyyyHHmmss}", date1) == String.Format("{0:ddMMyyyyHHmmss}", date2))
{
// success
}
Один из подходов может заключаться в создании двух новых DateTimes из ваших значений, которые вы хотите сравнить, но игнорировать все, начиная с секунд и ниже, а затем сравнивать их:
DateTime compare1 = new DateTime(year1, month1, day1, hour1, minute1, 0);
DateTime compare2 = new DateTime(year2, month2, day2, hour2, minute2, 0);
int result = DateTime.Compare(compare1, compare2);
Я был бы первым, кто Признаюсь, это не изящно, но решает проблему.
Как насчет этого класса ComparerClass?
public class DateTimeComparer : Comparer<DateTime>
{
private string _Format;
public DateTimeComparer(string format)
{
_Format = format;
}
public override int Compare(DateTime x, DateTime y)
{
if(x.ToString(_Format) == y.ToString(_Format))
return 0;
return x.CompareTo(y);
}
}
Его можно использовать
List.Sort(new DateTimeComparer("hh:mm"));
Используя TimeSpan, вы получаете всю необходимую вам детализацию :
DateTime dt1, dt2;
double d = (dt2 - dt1).TotalDays;
double h = (dt2 - dt1).TotalHours;
double m = (dt2 - dt1).TotalMinutes;
double s = (dt2 - dt1).TotalSeconds;
double ms = (dt2 - dt1).TotalMilliseconds;
double ticks = (dt2 - dt1).Ticks;