DotNet DateTime.ToString странные результаты - PullRequest
4 голосов
/ 15 декабря 2009

Почему:

DateTime.Now.ToString("M")

не вернуть номер месяца? Вместо этого он возвращает полное название месяца с указанным днем.

Очевидно, это потому, что "M" также является стандартным кодом для MonthDayPattern. Я не хочу этого ... Я хочу получить номер месяца, используя "M". Есть ли способ отключить это?

Ответы [ 6 ]

9 голосов
/ 15 декабря 2009

Согласно MSDN , вы можете использовать "%M", "M " или " M" ( примечание : последние два также будут включать пробел в результате) Принудительно M анализируется как формат числа месяца.

8 голосов
/ 15 декабря 2009

Здесь происходит конфликт между стандартными строками формата DateTime и спецификаторами пользовательских форматов. Значение «M» является неоднозначным в том смысле, что оно является как стандартным, так и пользовательским спецификатором формата. Реализация DateTime выберет стандартный форматер вместо клиентского форматера в случае конфликта, поэтому здесь он выигрывает.

Самый простой способ устранить неоднозначность - это поставить префикс M на% char. Этот символ означает, что следующее должно интерпретироваться как пользовательский форматер

DateTime.Now.ToString("%M");
5 голосов
/ 15 декабря 2009

Почему бы не использовать DateTime.Now.Month

4 голосов
/ 15 декабря 2009

Вы также можете использовать System.DateTime.Now.Month.ToString(); для достижения того же самого

2 голосов
/ 15 декабря 2009

Вы можете поместить пустой строковый литерал в формат, чтобы сделать его составным:

DateTime.Now.ToString("''M")
0 голосов
/ 22 июля 2010

Стоит отметить, что префикс% необходим для любой односимвольной строки формата при использовании метода DateTime.ToString(string), даже если эта строка не представляет один из встроенных шаблонов строки формата; Я столкнулся с этой проблемой при попытке получить текущий час. Например, фрагмент кода:

DateTime.Now.ToString("h")

бросит FormatException. Изменяя выше, чтобы:

DateTime.Now.ToString("%h")

указывает час текущей даты.

Я могу только предположить, что метод просматривает длину строки формата и решает, представляет ли она строку встроенного или пользовательского формата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...