Determinare l'uguaglianza dei valori Datetime con precisione al minuto all'interno di LINQ
Domanda
Devo confrontare due valori di data e ora per determinare l'uguaglianza (esattamente la stessa cosa), utilizzando la precisione al minuto. Sarebbe questo il modo migliore per farlo?Le mie date potrebbero avere secondi e millisecondi, ma voglio considerare solo fino ai minuti.
where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
Soluzione
Verifica se i Math.Abs(diff.TotalMinutes) == 0
non lo farà, no -. Che sta controllando se sono esattamente lo stesso
Si sta tentando di verificare se hanno lo stesso minuto, o se sono meno di un minuto l'una dall'altra? Per il primo, l'uso:
where RoundToMinute(dateTime1) == RoundToMinute(dateTime2)
aver dichiarato:
public static DateTime RoundToMinute(DateTime time)
{
return new DateTime(time.Year, time.Month, time.Day,
time.Hour, time.Minute, 0, time.Kind);
}
Per la seconda, utilizzare:
where Math.Abs((dateTime1 - dateTime2).TotalMinutes) < 1
Si dovrebbe prendere in considerazione ciò che si desidera che il risultato sia nel caso in cui uno è locale e uno è in UTC, a proposito ...
Si noti che non c'è niente di LINQ-specifici qui - supponendo che si sta utilizzando LINQ to Objects. Se stai usando LINQ to SQL, allora ovviamente non è possibile utilizzare i metodi locali, e dovremo guardare di nuovo ...
EDIT: Sono ancora molto poco chiaro sulla vostra domanda. Se li avete bisogno di essere esattamente la stessa data / ora, è facile (lasciando da parte la possibile locale vs problema UTC):
where dateTime1 == dateTime2
Tuttavia, che pone la questione del perché si parla "minuto di precisione" nel titolo domanda o "utilizzando fino a una precisione minuto" nel corpo questione.
Altri suggerimenti
Come su
where (Math.Floor(datetime1.Ticks / 600000000) == Math.Floor(datetime2.Ticks / 600000000))
Grazie Allen, lo farò (sto ancora cercando di capire esattamente come funziona il processo!). Ecco lo snippet di codice che indica la risposta che avevo inizialmente fornito:
(Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
Sfondo:All'interno della clausola WHERE della mia query Linq (quindi una riga), devo verificare se datetime1 e datetime2 sono esattamente le stesse.I valori datetime in esame sono date di timbro per altri valori utilizzati nella query.