Ответ 1
DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss")
Почему у меня возникла ошибка, когда я хочу получить строку TimeSpan
с пользовательским форматом.
DateTime.Now.TimeOfDay.ToString("hh:mm");
// Error: Input string was not in a correct format.
DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss")
В соответствии с MSDN TimeOfDay является TimeSpan. А в примерах TimeSpan.ToString вы видите, что :
нужно экранировать.
hh\:mm\:ss: 03:00:00
Это также объясняется на странице Microsoft Строки нестандартного формата TimeSpan
Пользовательские спецификаторы формата TimeSpan не включают символы-разделители-заполнители, такие как символы, которые отделяют дни от часов, часы от минут или секунды от дробных секунд. Вместо этого эти символы должны быть включены в строку пользовательского формата в виде строковых литералов. Например, "dd\.hh \: mm" определяет точку (.) Как разделитель между днями и часами, а двоеточие (:) - как разделитель между часами и минутами.
Так что попробуйте:
DateTime.Now.TimeOfDay.ToString("hh\\:mm");
Не используйте 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");