2012-09-22 106 views
9

我嘗試將TimeSpan格式化爲字符串。 然後我從MSDN到期生成我自定義的字符串格式。 但它沒有文字。它返回「FormatException」。TimeSpan ToString「[d。] hh:mm」

爲什麼?我不明白...

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

回答

9

我想你正在試圖做類似的可選天和c standard format的小數秒部分。據我所知,這不是直接可能與自定義格式字符串。 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(); 
+0

是的,它肯定會有效。但我會使用ToString格式。 MSDN說我可以使用「[」和「]」。這是真的嗎? – riofly

+0

它在哪裏說的?我只注意到''''和']'是它描述標準格式字符串的方式,但並不是說你實際上可以在自定義格式中使用這些'魔術'符號。 –

+0

對不起,其實我錯了。 – riofly

3

當您使用格式字符串中已定義含義的符號時,通常會出現此錯誤。調試這些的最好方法是有選擇地刪除字符,直到它工作。你刪除的最後一個字符是問題之一。

在這種情況下,望着custom TimeSpan format strings,方括號是問題。用「\」轉義,例如:

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

[編輯:新增]

沒有對客戶所提的自定義時間跨度格式字符串頁的方式忽略文本,如果值是0。在這種情況下, ,請考慮if語句或?:運算符。

+0

是的,我知道,方括號的問題。但我期待我可以使用「[」和「]」僅當值大於等於0時才返回日期。是否有可能? – riofly

+0

@riofly如果http://msdn.microsoft.com/en-us/library/ee372287.aspx中的值爲0,似乎沒有任何方法可以省略字符串的一部分。也許啊,如果陳述更好。答案已更新。 – akton