2010-08-11 5 views
17

Открыть окно часыПочему 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"

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

+0

это нестандартный формат, поэтому вы не можете добавить его без пробелов. –

ответ

38

Это потому, что он считает, что это standard format string вместо custom one, из-за того, что он является единственным персонажем.

Лучший способ крепления заключается в использовании %:

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

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

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

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

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

+0

Спасибо, Джон, я думаю, это имело бы смысл. Я просто работаю с: dte.ToString ("h") .Trim() на данный момент, чтобы обойти проблему. –

+1

DateTime.Now.ToString ("% h") - это работает для меня, большое спасибо. Я должен был прочитать официальное руководство вместо других веб-сайтов, я думаю! –

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