Подтвердить что ты не робот

Почему DateTime.ToString( "h" ) вызывает исключение?

Откройте окно просмотра

new DateTime(2010,01,01).ToString("h")

Дает:

new DateTime(2010,01,01).ToString("h") выбрал исключение типа System.FormatException

Но...

new DateTime(2010,01,01).ToString("h ")

Дает: "12"

Итак, почему дополнительное пространство останавливает исключение этого формата? Это ошибка?

4b9b3361

Ответ 1

Это потому, что он считает стандартную строку формата вместо custom один, из-за того, что он является единственным символом.

Лучший способ исправить это - использовать %:

string text = DateTime.Now.ToString("%h");

В документах по строкам произвольного формата:

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

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

Например, "% h" интерпретируется как пользовательская строка формата даты и времени который отображает час, представленный текущую дату и время. Вы также может использовать формат "h" или "h" строка, хотя это включает пробел в строке результата вместе с час. Следующий пример иллюстрирует эти три формата строки.