2009-12-15 4 views
4

Почему:DotNet DateTime.ToString странные результаты

DateTime.Now.ToString("M") 
не

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

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

ответ

9

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

+1

The% M - это то, что я искал. Благодаря! –

+0

Это именно то, что я искал! Приветствия. –

+0

приятно .. но если у вас есть словарь с коротким описанием и значением формата, или вы берете его из поля базы данных, поэтому ''% MM "' в may может вернуть 55 вместо 05 .. Редактировать: @Guffa answare, чтобы положить пустую строку перед символом '' '' M "' - покройте ее лучше. – oCcSking

5

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

+0

maybee для общего решения, такого как словарь с описаниями и форматами – oCcSking

4

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

2

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

DateTime.Now.ToString("''M") 
+0

10x the best1 (4me =) – oCcSking

8

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

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

DateTime.Now.ToString("%M"); 
+0

+1 Спасибо за объяснение проблемы, а также за решение обходного пути. – Odrade

0

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

DateTime.Now.ToString("h")

выбросит FormatException. Изменение вышеуказанного значения:

DateTime.Now.ToString("%h")

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

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

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