Posts
83
Comments
165
Trackbacks
11
[C#] DateTime.TryParse

Oggi mi sono imbattuto in un comportamento del framework che, almeno all'inizio, mi è sembrato alquanto strano...come si può capire dal titolo del post mi sto riferendo al metodo TryParse della classe DateTime e a come viene "parserizzata" la stringa in input a tale metodo, per verificare se si è in presenza o meno di una data corretta...

Dovendo verificare che la stringa contenuta in un TextBox fosse una data formattata correttamente, mi sono trovato in una strana situazione:

 ...
 
if (DateTime.TryParse(TextBox.Text, out date))
 ...

il valore ritornato dalla funzione era true, ma la TextBox conteneva un valore che io ritenevo, per lo meno, anomalo...ovvero "13/1" . Ma come? Un bug?!?!? (come al solito a pensare male...)

Altro che bug...la funzione è fin troppo intelligente ...infatti prima di "alzare bandiera bianca" e affermare che la stringa in ingresso è tutt'altro che una data, le prova proprio tutte cercando di "ricondurre" l'input ad una data accettabile...

Nel caso in oggetto, la stringa "13/1" viene interpretata come la data "13/01/2007 00:00:00"...
...ma non solo, continuando a giochicchiarci mi sono reso conto anche dei seguenti risultati:

 DateTime.TryParse("13/1/2", out result);     // true & result = 13/01/2002 00:00:00
 
DateTime.TryParse("13/1/22", out result);    // true & result = 13/01/2022 00:00:00
 
DateTime.TryParse("13/1/200", out result);   // true & result = 13/01/0200 00:00:00

Bhe non ho scoperto nulla di nuovo...bastava leggere la documentazione!

This method attempts to ignore unrecognized data and parse s completely. It ignores unrecognized data if possible and fills in missing month, day, and year information with the current time. If s contains only a date and no time, this method assumes the time is 12:00 midnight. Any leading, inner, or trailing white space character in s is ignored. The date and time can be bracketed with a pair of leading and trailing NUMBER SIGN characters ('#', U+0023), and can be trailed with one or more NULL characters (U+0000).

"...sovvertiamo le gerarchie..."

posted on venerdì 28 settembre 2007 12:59 Print