Ошибка TimeSpan.ToString( "hh: mm" )

Почему у меня возникла ошибка, когда я хочу получить строку TimeSpan с пользовательским форматом.

DateTime.Now.TimeOfDay.ToString("hh:mm");
// Error: Input string was not in a correct format.

Ответы

Ответ 2

В соответствии с MSDN TimeOfDay является TimeSpan. А в примерах TimeSpan.ToString вы видите, что : нужно экранировать.

hh\:mm\:ss: 03:00:00

Это также объясняется на странице Microsoft Строки нестандартного формата TimeSpan

Пользовательские спецификаторы формата TimeSpan не включают символы-разделители-заполнители, такие как символы, которые отделяют дни от часов, часы от минут или секунды от дробных секунд. Вместо этого эти символы должны быть включены в строку пользовательского формата в виде строковых литералов. Например, "dd\.hh \: mm" определяет точку (.) Как разделитель между днями и часами, а двоеточие (:) - как разделитель между часами и минутами.

Так что попробуйте:

DateTime.Now.TimeOfDay.ToString("hh\\:mm");      

Ответ 3

Не используйте TimeOfDay. Непосредственно сделайте ToString() на DateTime.Now:

DateTime.Now.ToString("hh:mm");

TimeOfDay является TimeSpan. В документах четко указано это о перегрузке TimeSpan.ToString(string format):

Параметр format может быть любым допустимым стандартным или специальным спецификатором формата для значений TimeSpan. Если формат равен String.Empty или имеет значение null, возвращаемое значение текущего объекта TimeSpan форматируется с помощью спецификатора общего формата ( "c" ). Если форматом является любое другое значение, метод генерирует исключение FormatException.

Если вы должны сделать это, используя переменную TimeSpan, вы можете просто добавить ее в переменную DateTime, у которой установлена ​​ее часть времени, равная нулю, а затем используйте ее ToString():

DateTime.Today.Add(YourTimeSpanVariable).ToString("hh:mm");