Почему DateTime.ToString ("h") вызывает исключение? - PullRequest
21 голосов
/ 11 августа 2010

Открыть окно часов

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

Дает:

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

Тем не менее ...

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

Дает: "12"

Так почему же дополнительный пробел мешает этому исключению формата произойти? Это ошибка?

1 Ответ

43 голосов
/ 11 августа 2010

Это потому, что он думает, что это стандартная строка формата вместо custom one , потому что это один символ.

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

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

Из документации по строкам нестандартного формата:

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

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

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

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