我想将一个TimeSpan格式化为字符串。 然后我从MSDN中获取到过期时间,以生成自定义的字符串格式。 但是它不起作用。它返回“FormatException”。
为什么?我不明白...
var ts = new TimeSpan(0, 3, 25, 0);
var myString = ts.ToString("[d'.']hh':'mm");
我想将一个TimeSpan格式化为字符串。 然后我从MSDN中获取到过期时间,以生成自定义的字符串格式。 但是它不起作用。它返回“FormatException”。
为什么?我不明白...
var ts = new TimeSpan(0, 3, 25, 0);
var myString = ts.ToString("[d'.']hh':'mm");
c
标准格式 中的可选日期和分数秒部分。据我所知,使用自定义格式字符串不能直接实现这一点。TimeSpan FormatString with optional hours 是您提出的相同类型的问题,我建议采用类似他们解决方案的扩展方法来构建格式字符串。public static string ToMyFormat(this TimeSpan ts)
{
string format = ts.Days >= 1 ? "d'.'hh':'mm" : "hh':'mm";
return ts.ToString(format);
}
var myString = ts.ToMyFormat();
这种错误通常会在您在格式化字符串中使用具有定义意义的符号时出现。调试它们的最佳方法是选择性地删除字符,直到它能正常工作。您删除的最后一个字符是问题所在。
在这种情况下,查看自定义TimeSpan格式字符串,方括号是问题所在。通过 "\" 转义它们,例如:
var ts = new TimeSpan(0, 3, 25, 0);
var myString = ts.ToString("\\[d'.'\\]hh':'mm");
[编辑: 添加]
在客户自定义TimeSpan格式字符串页面中,并没有提到如何省略文本,如果值为0的话。在这种情况下,可以考虑使用if
语句或者?:
运算符。
[
和]
的唯一时候是在描述标准格式字符串的方式,但没有说你可以在自定义格式中实际使用这些“魔法”符号。 - Tim S.