繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM