DateTime.Parse sta perdendo millisecondi da DataRow? [duplicare]
Ho un DATETIMEcampo in SQL Server chiamato EntryTimecon un valore di 2020-11-04 18:55:19.437. Come puoi vedere, l'elemento millisecondi è presente con un valore di 437. Tuttavia, se analizzo questo valore dal mio DataRow:
DateTime entryTime = DateTime.MinValue;
if (row["EntryTime"] != DBNull.Value)
entryTime = DateTime.Parse(row["EntryTime"]?.ToString());
Quindi ottengo tutto tranne il valore del millisecondo.
La mia ipotesi qui è che .ToString()sta diminuendo i millisecondi e l'ho confermato nella mia finestra immediata:
Perché i millisecondi vengono eliminati?
Risposte
I millisecondi vengono eliminati a causa di come funziona .ToString() specificamente sugli DateTimeoggetti. Secondo la documentazione MSDN su DateTime.ToString()(enfasi mia):
ToString (): converte il valore dell'oggetto DateTime corrente nella sua rappresentazione di stringa equivalente utilizzando le convenzioni di formattazione delle impostazioni cultura correnti .
Ecco row["EntryTime"]un object, ma ancora più importante, è un boxed DateTime:
Pertanto non è necessario convertirlo in stringa e quindi analizzarlo. In realtà, dovresti assicurarti che il valore di row["EntryTime"]non sia DBNull.Value, quindi decomprimere il valore eseguendo esplicitamente il cast a DateTime:
DateTime entryTime = DateTime.MinValue;
if (row["EntryTime"] != DBNull.Value)
entryTime = (DateTime)row["EntryTime"];
Questo ti darà l' DateTimeoggetto con la Millisecondproprietà ancora intatta: