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

时间:2014-05-28 07:17:34

标签: c# timespan

我需要将TimeSpan转换为格式为hh:mm tt的字符串。

Timespan? tTime;
Console.WriteLine(tTime.ToString("hh:mm tt"));
如果value不为null,

ToString("hh:mm tt")效果很好,但是当值为null时,它会导致错误。

有没有解决方案?

4 个答案:

答案 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") : "??:??:??";