Dato il seguente codice C#:date Interpretazione: Console.Writeline vs string.Format
var dt = DateTime.Now;
Console.WriteLine("{0:MM/dd/yy} ... {1}", dt, string.Format("{0:MM/dd/yy}", dt));
... quando la data breve (sotto Windows 7, Control Panel -> Region and Language -> Additonal Settings -> Date
) è impostato su Stati Uniti standard di "M/d/yyyy
" ottengo questo:
06/17/14 ... 06/17/14
Tuttavia, quando cambio la data breve per "ddd dd MMM yyyy
," ottengo questo:
06/17/14 ... 06 17 14
Ho avuto l'impressione che Console.WriteLine
e string.Format
sempre stringa formattato identicamente i valori DateTime
. Qual è la spiegazione di questa discrepanza?
MODIFICA: Sembra che ciò avvenga solo nell'output di test dell'unità standard (Visual Studio), che è il luogo in cui originariamente ho visto il problema. Quando il codice viene eseguito in un'app console, l'output è 06 17 14 ... 06 17 14
.
Non dovrebbe importare quali siano le impostazioni di sistema quando si imposta in modo esplicito la stringa di formato. Penso che qualcos'altro stia succedendo qui. – Enigmativity
In realtà può essere importante poiché "/" non sono caratteri letterali ma separatori e l'output effettivo dipende dalla cultura, ad es. in Germania sarebbe un ".". Ma questo non spiega perché l'output è diverso quando si utilizza lo stesso formato esplicito in 'Console.WriteLine' e' String.Format'. – Dirk
@Enigmativity: Beh, modificare la data breve equivale a modificare la cultura, per quanto riguarda .NET. Mi chiedo solo perché le due chiamate al metodo non si comportano allo stesso modo. – MiloDC