[英]How can I convert a nullable TimeSpan to a string with a specific format?
我需要将TimeSpan
转换为格式为hh:mm tt
的字符串。
Timespan? tTime;
Console.WriteLine(tTime.ToString("hh:mm tt"));
如果value不为null,则ToString("hh:mm tt")
可以很好地工作,但是当value为null时,它将导致错误。
有什么解决办法吗?
只是使用if语句还是缩短的? 声明。 值为空时,在: ""
填写所需的结果
Console.WriteLine(tTime.HasValue ? tTime.Value.ToString("hh:mm tt") : "");
出现错误的原因是因为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关于“” vs String.Empty的答案 ,您基本上可以使用其中任何一个。
您需要首先通过使用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") : "??:??:??";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.