TimeSpan.Parse ("23:00:00") restituisce 23 ore.C# TimeSpan.Parse formato non valido restituisce il valore errato anziché l'eccezione
TimeSpan.Parse ("24:00:00") restituisce 24 giorni!
Mi rendo conto che ho fatto un errore in quanto l'intervallo di ore consentito è 0-23. Ma per minuti e secondi se si tenta di analizzare un valore fuori intervallo si ottiene un'eccezione. Nel caso di ore con un valore fuori intervallo, il parser presuppone in modo errato che si intendano giorni anziché ore.
Qualcuno può spiegarlo?
Questo esempio qui si estende su questo argomento e indica che http://msdn.microsoft.com/en-us/magazine/ee309881.aspx
Lo stesso sembra essere vero su TryParse. Ottengo 24 giorni nonostante i documenti affermino che l'analisi dovrebbe fallire.
http://msdn.microsoft.com/en-us/library/3z48198e
// String to Parse TimeSpan
// --------------- ---------------------
// 0 00:00:00
// 14 14.00:00:00
// 1:2:3 01:02:03
// 0:0:0.250 00:00:00.2500000
// 10.20:30:40.50 10.20:30:40.5000000
// 99.23:59:59.9999999 99.23:59:59.9999999
// 0023:0059:0059.0099 23:59:59.0099000
// 23:0:0 23:00:00
// 24:0:0 Parse operation failed.
// 0:59:0 00:59:00
// 0:60:0 Parse operation failed.
// 0:0:59 00:00:59
// 0:0:60 Parse operation failed.
// 10: Parse operation failed.
// 10:0 10:00:00
// :10 Parse operation failed.
// 0:10 00:10:00
// 10:20: Parse operation failed.
// 10:20:0 10:20:00
// .123 Parse operation failed.
// 0.12:00 12:00:00
// 10. Parse operation failed.
// 10.12 Parse operation failed.
// 10.12:00 10.12:00:00
ho trovato un bug o sto facendo qualcosa di sbagliato?
MODIFICA: Ho provato questo in LinqPad e utilizzando un'app Console in .NET4 su Windows 7 a 64 bit.
var result = TimeSpan.Parse("24:00:00");
Console.WriteLine(result);
result = TimeSpan.Parse("24:00:00", CultureInfo.InvariantCulture);
Console.WriteLine(result);
Questo si traduce in:
24.00:00:00
24.00:00:00
si sta confrontando risultato di TryParse e analizzare. Il metodo TimeSpan.Parse (String) tenta di analizzare la stringa (parametro) utilizzando ciascuno dei formati specifici della cultura per la cultura corrente. Quindi stai ricevendo giorni. –
Getta un'eccezione per me. Forse è una cosa culturale? @Romil: 'Parse' chiama' TryParse' dietro le quinte quindi dovrebbero avere lo stesso risultato. – Rawling
Questo genera in modo affidabile OverflowException quando lo provo. Migliora la tua domanda documentando la versione di .NET, la tua cultura e eventuali sostituzioni che potresti aver applicato nelle impostazioni regionali di Windows. –