DateTime.Parse sta perdendo millisecondi da DataRow? [duplicare]

Nov 05 2020

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

2 Tacoタコス Nov 05 2020 at 02:53

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: