voglio sapere come confrontare due datetime valori colui che è retreived dal database SQL e l'altro è quello attuale con C#confrontare due valori datetime da SQL Server con C#
risposta
È possibile utilizzare il metodo DateTime.CompareTo.
L'utilizzo è simile a questo:
firstDateTime.CompareTo(secondDatetime);
e restituisce un int come un risultato che indica
Meno di zero - Questa istanza è precedente valore.
Zero: questa istanza equivale al valore.
Maggiore di zero: questa istanza è successiva al valore.
Supponendo che si desidera verificare che i due DateTimes sono equivalenti c'è in questo modo:
TimeSpan span = dateTime2 - dateTime1;
if (span == TimeSpan.Zero)
{
// The times are the same
}
Sarà necessario convertire il System.Data.SqlTypes.SqlDateTime
-System.DateTime
prima, naturalmente, come echosca sottolinea nel suo answer.
Anche se è necessario un errore di arrotondamento consentito (nell'intervallo del millisecondo), poiché è probabile che si tratti di valori derivati dal mondo reale, poiché l'uguaglianza semplice non sarebbe sufficiente. Avreste bisogno di qualcosa di simile:
if (Math.Abs(span.TotalMilliseconds) < 10.0)
{
// The times are within the allowed range
}
Se si desidera solo per confrontare se uno sia anteriore o dopo l'altro utilizzare il metodo DateTime.CompareTo
come altri hanno suggerito.
'span.TotalDays == 0 && span.TotalHours == 0 && span.TotalMinutes == 0' bit è completamente ridondante, poiché TotalSeconds includerà implicitamente minuti, ore, ecc. Convertiti in secondi. – Noldorin
Bugger - questo è ciò che accade digitando troppo velocemente! Aggiornerò la risposta – ChrisF
@ChrisF: Sì, errore abbastanza facile da fare. Ad ogni modo, è bene che tu abbia sottolineato che i problemi in virgola mobile entrano durante il test di euqliaty di DateTimes. (Più comunemente, tuttavia, è sufficiente utilizzare < and >.) – Noldorin
Gli operatori di confronto standard (ad esempio uguaglianza, minore di, maggiore di) sono sovraccaricati per il tipo DateTime
. Così si può semplicemente eseguire test come il seguente:
var foo = DateTime.Parse("01/01/1900");
var bar = DateTime.Now;
var test1 = foo == bar; // false
var test2 = foo != bar; // true
var test3 = foo < bar; // true
var test4 = foo > bar; // false
+1. Non vedo perché alcune risposte rendano inutilmente complicato questo. –
Cheers.E sì, questo è sicuramente il modo più diretto per andare secondo me. (Dà lo stesso comportamento di CompareTo, ma è più leggibile.) – Noldorin
È necessario inserire il valore da SQL ad oggetto C# DateTime, e poi confrontarli in C#. Ecco un link da MSDN su come farlo.
Quando recuperato dal database, dovresti essere in grado di utilizzare un SqlDataReader per eseguire il cast sul tipo .NET corretto. (o utilizzare DataTable/DataSet, che esegue automaticamente questa operazione).
SqlDataReader dr = cmd.ExecuteReader();
DateTime dt = dr.GetDateTime(dr.GetOrdinal("someDateTimeColumn"));
allora si può confrontare normalmente:
DateTime otherDate = DateTime.Now;
int compResult = dt.CompareTo(otherDate);
if(compResult > 0) { Console.Write("dt is after otherDate"); }
else if(compResult < 0) { Console.Write("dt is before otherDate"); }
else { Console.Write("dt is equal to otherDate"); }
DateTime struct sovrascrive GreterThen, GreaterThenOrEqual, LesserThen, LesserThenOrEqual operater, Equalty operater.
DateTime dateTime1, dateTime2;
dateTime1 = DateTime.Now;
dateTime2 = //set value from database;
// all this operations are legal
if(dateTime1 == dateTime2){}
if(dateTime1 > dateTime2){}
if(dateTime1 < dateTime2){}
System.Data.SqlTypes.SqlDateTime e System.DateTime utilizzano diverse strutture sottostanti per rappresentare date.
SqlDateTime rappresenta l'intervallo 1 gennaio 1753 al 31 dicembre 9999 con una precisione di 3,33 millisecondi
DateTime (.NET Framework type) rappresenta l'intervallo tra Jan 1, 0001 a Dec, 31 9999 alla precisione di 100 nanosecondi
Si deve fare attenzione a questi limiti quando si confrontano le date. Una tattica per alleviare i problemi nei confronti potrebbe essere quella di trasmettere tutto a System.DateTime e quindi eseguire il confronto.
È possibile utilizzare la proprietà Value della struttura SqlDateTime (che restituisce un System.DateTime) per eseguire il confronto in modo elegante e senza casting esplicito.
È possibile trovare informazioni this article.
Spero che questo articolo (DATEDIFF Function Demystified) sia utile, sebbene sia specifico per datetime in SQL, è utile per capire come viene gestito sul lato del database.
Attenzione quando si confrontano DateTimes generate all'interno di C#. La struttura DateTime in C# ha più precisione rispetto al tipo datetime in SQL Server. Quindi, se si genera un DateTime in C# (ad esempio da DateTime.Now
), memorizzarlo nel database e recuperarlo, sarà molto probabilmente diverso.
Per esempio, il codice seguente:
using(SqlConnection conn = new SqlConnection("Data Source=.;Integrated Security=SSPI"))
using(SqlCommand cmd = new SqlCommand("SELECT @d", conn)){
DateTime now = DateTime.Now;
cmd.Parameters.Add(new SqlParameter("@d", now));
conn.Open();
DateTime then = (DateTime)cmd.ExecuteScalar();
Console.WriteLine(now.ToString("yyyy/MM/dd HH:mm:ss.fffffff"));
Console.WriteLine(then.ToString("yyyy/MM/dd HH:mm:ss.fffffff"));
Console.WriteLine(then - now);
}
restituisce il seguente risultato di esempio.
2009.06.20 12:28:23.6115968 2009.06.20 12:28:23.6100000 -00:00:00.0015968
Quindi, in questa situazione, si consiglia di controllare che la differenza è all'interno di un certo epsilon:
Math.Abs((now - then).TotalMilliseconds) < 3
Si noti che questo non è un problema se si sta confrontando due datetimes recuperato dal database, o un datetime costruito da componenti con granularità seconda o maggiore.
Consulta anche: this blog post
Vedere nota circa la precisione, dove si parla di "arrotondato a incrementi di .000, .003, .007 o secondi"
- 1. Come confrontare datetime con unica data in SQL Server
- 2. Come confrontare/confrontare i valori in due gruppi di risultati in SQL Server 2008?
- 3. Come confrontare due oggetti con valori stringa?
- 4. Ormlite non associa Datetime da SQL Server a C#?
- 5. Come confrontare due DateTime in secondi?
- 6. SQL Server selezionare righe tra due valori
- 7. Django confrontare i valori di due oggetti
- 8. MySQL confrontare stessi valori in due colonne
- 9. SQL confrontare i dati di due tabelle
- 10. Come confrontare due dizionari in C#
- 11. Confronto di due schemi di database SQL Server in C#
- 12. Come confrontare due valori doppi in Java?
- 13. Come confrontare due X509Certificate2 C#
- 14. SQL Server 2005 - Verifica valore DateTime nullo
- 15. Come confrontare due valori di data con jQuery
- 16. Come non possiamo confrontare due valori enum con '<'?
- 17. Inserimento DATETIME SQL da Excel?
- 18. Estrazione ore da un DateTime (SQL Server 2005)
- 19. mvc4 confrontare due date
- 20. Nessun valore in millisecondi durante la lettura dei valori DateTime da un database SQL in C#
- 21. Come posso confrontare il tempo in SQL Server?
- 22. Come confrontare se due stringhe contengono le stesse parole in T-SQL per SQL Server 2008?
- 23. È possibile confrontare due cursori?
- 24. SQL Server 2008: come confrontare XML?
- 25. SQL Server: calcolo con valori letterali numerici
- 26. Come confrontare due dataframes?
- 27. Come selezionare i valori da due diverse tabelle in SQL
- 28. Impostazione SQL Server 2008 Variabile DateTime
- 29. SQL Server millisecondi Remove from datetime
- 30. Confrontare la parte temporale del tipo di dati DateTime in SQL Server 2005
si prega di scrivere la dichiarazione –
Nella parte inferiore di questa pagina troverai un esempio concreto in C#: http://msdn.microsoft.com/en-us/library/5ata5aya.aspx – merkuro
thana molto per te –