Почему эти два формата даты отличаются? - PullRequest
2 голосов
/ 03 октября 2008

Я пытаюсь создать только номер дня в текстовом блоке WPF, без начальных нулей и без дополнительного пробела (который отбрасывает макет). Первая выдает номер дня с пробелом, вторая - всю дату. В соответствии с документами , 'd' должно давать день (1-31).

string.Format("{0:d }", DateTime.Today);
string.Format("{0:d}", DateTime.Today);

ОБНОВЛЕНИЕ: Добавление% - это действительно хитрость. Соответствующие документы здесь .

Ответы [ 3 ]

5 голосов
/ 03 октября 2008

См. здесь

d,% d

День месяца. Дни с одной цифрой не имеют начального нуля. Приложение указывает «% d», если шаблон формата не объединен с другими шаблонами формата.

В противном случае d интерпретируется как:

d - 'ShortDatePattern'

PS. Для возни со строками формата использование LinqPad неоценимо

1 голос
/ 03 октября 2008

Из документации MSDN для «Пользовательских строк формата даты и времени»:

Любая строка, которая не является стандартной датой и строка формата времени интерпретируется как пользовательский формат даты и времени строка.

{0: d} интерпретируется как стандартная строка данных и формата времени. Из «Стандартных строк формата даты и времени» спецификатор формата «d»:

Представляет пользовательскую дату и время строка формата, определяемая текущим Свойство ShortDatePattern.

С пробелом {0: d} не соответствует ни одной стандартной строке формата даты и времени и интерпретируется как строка пользовательского формата данных и времени. Из "Пользовательских строк формата даты и времени" спецификатор формата "d":

Представляет день месяца как число от 1 до 31.

0 голосов
/ 03 октября 2008

В формате {0:d} используются шаблоны, определенные в документе Стандартные строки формата даты и времени MSDN . «d» переводится в шаблон с короткой датой, «D» - в шаблон с длинной датой и т. д. и т. д.

Требуемый формат: Пользовательские модификаторы формата даты и времени , которые работают, когда нет соответствующего заданного формата (например, 'd', включая пробел) или когда вы используете ToString ( ).

Вместо этого вы можете использовать следующий код:

string.Format("{0}", DateTime.Today.ToString("d ", CultureInfo.InvariantCulture));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...