2014-07-09 3 views
11

У меня проблема со строковым форматом DateTime. Я думаю, что это ошибка в MS. Можете ли вы это объяснить, и что не так?Проблема DateTime.ToString со строковым форматом «M» в .NET

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine(DateTime.Now.ToString("M"));//return 07 July <---- WRONG, SEE MSDN 
     Console.WriteLine(DateTime.Now.ToString(".M"));//return .7 <---- GOOD 
     Console.ReadKey(); 
    } 
} 

MSDN

+0

Что относительно Культуры? –

+0

Я попытался перейти на Invariant, en-US, cs-CZ, это та же проблема. – Musketyr

+1

Вместо этого используйте «% M». –

ответ

22

От The "M" Custom Format Specifier

Если "M" спецификатор формата используется без другого пользовательского формата спецификаторов, он интерпретируется как "M" standard date and time format specifier. Для получения дополнительной информации об использовании спецификатора одного формата, см. Using Single Custom Format Specifiers далее в этом разделе.

От Using Single Custom Format Specifiers

Строка пользовательский формат даты и времени состоит из двух или более символов. Методы форматирования даты и времени интерпретируют любую односимвольную строку как стандартную строку формата даты и времени. Если они не распознают символ как допустимый спецификатор формата, то они выбрасывают FormatException. Например, строка формата, которая состоит из , только спецификатора «h» интерпретируется как стандартная дата и время формат строки. Однако в этом конкретном случае исключение составляет , потому что нет стандартного формата даты и времени «h» .

Чтобы использовать любой из пользовательского формата даты и времени спецификаторов в качестве единственного спецификатора в строке формата (то есть, чтобы использовать «D», «F», «F», «G», " h "," H "," K "," m ", " M "," s "," t "," y "," z ",": "или"/"произвольный формат спецификатор по сам), включают пробел до или после спецификатора, или включить спецификатор формата процента («%») перед одним настраиваемым спецификатором даты и времени .

Вот почему вы можете использовать один из них;

Console.WriteLine(DateTime.Now.ToString(" M")); // 7 
Console.WriteLine(DateTime.Now.ToString("M ")); //7 
Console.WriteLine(DateTime.Now.ToString("%M")); //7 
+3

+1. Это то, что я называю чтением между линиями. Все было впереди ОП. OP даже предоставил ссылку. –

+3

+1. Спасибо, это решение. Положите% в «% M», верните правильное значение. – Musketyr

+3

@NikhilAgrawal: Я думаю, что это скорее «чтение строк», чем чтение строк. ;-) – Chris

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