Determinare l'uguaglianza dei valori Datetime con precisione al minuto all'interno di LINQ

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

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)
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top