Как я могу преобразовать обнуляемый TimeSpan в строку с определенным форматом?

1

Мне нужно преобразовать TimeSpan в строку с форматом hh:mm tt.

Timespan? tTime;
Console.WriteLine(tTime.ToString("hh:mm tt"));

ToString("hh:mm tt") работает хорошо, если значение не равно null, но вызывает ошибку, когда значение равно null.

Есть ли какие-либо решения?

Теги:
timespan

4 ответа

2

Просто используйте оператор if или сокращенный? выражение. Заполните желаемый результат : "" когда значение равно нулю

Console.WriteLine(tTime.HasValue ? tTime.Value.ToString("hh:mm tt") : "");
  • 1
    Получил пометку для длины + содержание, вероятно, из-за отсутствия объяснения.
  • 0
    Ну, вопрос очень прост, как и ответ. Все еще сделал простое объяснение
Показать ещё 3 комментария
2

Причина, по которой вы получаете ошибку, состоит в том, что tTime.ToString("hh:mm tt") пытается принудительно преобразовать ее значение в строку с требуемым форматом.
Если это значение равно NULL, для преобразования не существует способа для его обработки, тем самым вызывая ошибку.

Один из способов сделать это - ответить на @KevinCloet, где он просто проверяет, имеет ли значение tTime значение и преобразует его, если это так.

//                validation     ? if true                          : if false
Console.WriteLine(tTime.HasValue ? tTime.Value.ToString("hh:mm tt") : String.Empty);

который также может быть записан как:

// Boolean values don't need = true
if(tTime.HasValue){
   Console.WriteLine(tTime.Value.ToString("hh:mm tt"));
}else{
   Console.WriteLine(String.Empty);
}

Другой способ сделать это - использовать метод try{}catch(){}, который почти такой же, как и оператор extended if

try{
   Console.WriteLine(tTime.Value.ToString("hh:mm tt"));
}
catch(Exception e){
   // You don't actually need the 'Exception e', 
   // however 'e.Message' will tell you exactly what went wrong
   Console.WriteLine(String.Empty);
}

Надеюсь, это объяснение поможет вам понять, а не просто дать вам ответ.

Редактировать:
Основываясь на ответе Джона Скетса на тему "" против String.Empty, вы можете по существу использовать и то, и другое.

  • 0
    +1, но предпочитаю String.Empty вместо ""
  • 0
    @ Xaruth действительная точка :)
Показать ещё 2 комментария
0

Попробуйте следующий код:

string time = spantime.HasValue ? spantime.Value.ToString("hh':'mm':'ss") : "??:??:??";
0

Сначала нужно проверить значение, используя HasValue, или сравнением с нулем.

Однако вам также необходимо использовать допустимую строку формата времени. "hh:mm tt" действует на DateTime, но не на TimeSpan. Попробуй это:

string s = tTime.HasValue ? tTime.Value.ToString("hh\\:mm") : "";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню