@ La soluzione di ALZ sembra piacevole ma è troppo complicato e ha un bug. Quindi ho deciso di combinarlo con la soluzione di @ ChrisF.
public class DateTimeComparer : Comparer<DateTime>
{
public enum Precision
{
Years = 0,
Months,
Days,
Hours,
Minutes,
Seconds,
Millisecons,
Ticks
}
private Precision _precision;
public DateTimeComparer(Precision precision = Precision.Ticks)
{
_precision = precision;
}
public override int Compare(DateTime x, DateTime y)
{
if (_precision == Precision.Ticks)
{
return x.CompareTo(y);
}
var xx = AssembleValue(x, _precision);
var yy = AssembleValue(y, _precision);
return xx.CompareTo(yy);
}
private static DateTime AssembleValue(DateTime input, Precision precision)
{
var p = (int)precision;
var i = 1;
return new DateTime(input.Year,
p >= i++ ? input.Month : 1,
p >= i++ ? input.Day : 1,
p >= i++ ? input.Hour : 0,
p >= i++ ? input.Minute : 0,
p >= i++ ? input.Second : 0,
p >= i++ ? input.Millisecond : 0);
}
}
Penso che non ci sia alcun proiettile di siver qui ... Dipende totalmente dalle tue preferenze ...In ogni modo, grazie per aver fatto questa domanda ... Ho imparato molte cose da questo Q. –
Volevo solo sottolineare che in base alla risposta selezionata, questa domanda è sbagliata. Non stai chiedendo di confrontare * il tempo assoluto * fino al minuto, stai chiedendo di controllare se * il tempo trascorso * è inferiore a una certa soglia. – ErikE