如何将可为空的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为空的情况下会导致错误。

有什么解决办法吗?

如何将可为空的TimeSpan转换为具有特定格式的字符串?

您得到错误的原因是因为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") : "??:??:??";