如何将可为空的TimeSpan转换为具有特定格式的字符串?
本文关键字:定格 格式 字符串 TimeSpan 转换 | 更新日期: 2023-09-27 18:05:34
我需要将TimeSpan
转换为格式为hh:mm tt
的字符串。
Timespan? tTime;
Console.WriteLine(tTime.ToString("hh:mm tt"));
ToString("hh:mm tt")
在value不为空的情况下工作正常,但在value为空的情况下会导致错误。
有什么解决办法吗?
您得到错误的原因是因为tTime.ToString("hh:mm tt")
试图强制将其值转换为字符串,具有所需的格式。
如果该值为空,则转换无法处理它,从而抛出错误。
一种方法是遵循@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对"vs"字符串"的回答。
只需使用if语句或缩短的?声明。当值为null时,在: ""
中填写所需的结果
Console.WriteLine(tTime.HasValue ? tTime.Value.ToString("hh:mm tt") : "");
您需要首先通过使用HasValue
或通过与null比较来检查值。
但是,您还需要使用有效的时间跨度格式字符串。"hh:mm tt"
在DateTime
上有效,但在TimeSpan
上无效。试试这个:
string s = tTime.HasValue ? tTime.Value.ToString("hh'':mm") : "";
尝试以下代码:
string time = spantime.HasValue ? spantime.Value.ToString("hh':'mm':'ss") : "??:??:??";