2013-09-13 4 views
5

следующий код:Форматирование DateTime в строку

DateTime dt = new DateTime(2013, 9, 13, 14, 34, 0); 
string s = dt.ToString("MM/dd/yyyy"); 

textBox1.AppendText(DateTime.Now + "\n"); 
textBox1.AppendText(s + "\n"); 
textBox1.AppendText(dt.ToString() + "\n"); 

производит следующий вывод в текстовом поле:

13.09.2013 1441.28 
09.13.2013 
13.09.2013 1434.00 

С первой строке вывода, то ясно, что в региональной обстановке мой компьютер, дата/время отформатировано как date.month.year HHmm.ss.

Вторая строка вывода меня сбивает с толку. Хотя я указал MM/dd/yyyy формат для переменной s, объект DateTime отформатирован как MM.dd.yyyy. Зачем?

Это программа C# WPF на .NET Framework 4.

ответ

7

/ является заполнителем для разделителя даты вашей текущей культуры. Если вы хотите, чтобы обеспечить его в качестве разделителя необходимо указать CultureInfo.InvariantCulture:

string s = dt.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture); 

См: The "/" Custom Format Specifier

Соответствующий локализованы разделитель даты извлекается из DateTimeFormatInfo.DateSeparator свойства текущего или указанного культуры.


То же самое верно, если вы хотите, чтобы разобрать string на DateTime.

После бросает FormatException, если фактическая дата-разделитель вашей текущей культуры не является /:

DateTime.ParseExact("09/13/2013", "MM/dd/yyyy", null); 

работы всегда:

DateTime.ParseExact("09/13/2013", "MM/dd/yyyy", CultureInfo.InvariantCulture); 
+0

+1 Ого, даже не понял, что, потому что для меня дата разделитель ''/"'. Хороший улов. –

Смежные вопросы