我需要将TimeSpan
转换为格式为hh:mm tt
的字符串。
Timespan? tTime;
Console.WriteLine(tTime.ToString("hh:mm tt"));
如果value不为null, ToString("hh:mm tt")
效果很好,但是当值为null时,它会导致错误。
有没有解决方案?
答案 0 :(得分:2)
只使用if语句或缩短?声明。当值为空时,在: ""
中填写所需的结果
Console.WriteLine(tTime.HasValue ? tTime.Value.ToString("hh:mm tt") : "");
答案 1 :(得分: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(){}
方法,它与扩展的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);
}
我希望这个解释能帮助你理解,而不仅仅是给你答案。
修改强>
基于Jon Skeets answer on "" vs String.Empty,您基本上可以使用。
答案 2 :(得分:0)
您需要首先检查值,使用HasValue
或与null进行比较。
但是,您还需要使用有效的timespan format string。 "hh:mm tt"
在DateTime
上有效,但在TimeSpan
上无效。试试这个:
string s = tTime.HasValue ? tTime.Value.ToString("hh\\:mm") : "";
答案 3 :(得分:0)
请尝试以下代码:
string time = spantime.HasValue ? spantime.Value.ToString("hh':'mm':'ss") : "??:??:??";