11

我试图将 TimeSpan 格式化为字符串。然后我从 MSDN 获得过期以生成我的自定义字符串格式。但它不说话。它返回“格式异常”。

为什么?我不明白...

var ts = new TimeSpan(0, 3, 25, 0);
var myString = ts.ToString("[d'.']hh':'mm");
4

2 回答 2

13

我认为您正在尝试执行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();
于 2012-09-22T11:49:34.653 回答
3

当您使用在格式字符串中定义了含义的符号时,通常会发生此错误。调试这些的最好方法是有选择地删除字符,直到它工作。您删除的最后一个字符是问题之一。

在这种情况下,查看自定义 TimeSpan 格式字符串,方括号是问题所在。用“\”转义它们,例如:

var ts = new TimeSpan(0, 3, 25, 0);
var myString = ts.ToString("\\[d'.'\\]hh':'mm");

[编辑:添加]

如果值为 0,则客户自定义 TimeSpan 格式字符串页面上没有提到省略文本的方法。在这种情况下,请考虑if语句或?:运算符。

于 2012-09-22T11:38:43.330 回答