2015-01-15 27 views
6

​​:解析時間跨度與可選的減號

風格參數會影響使用自定義格式字符串解析字符串的解釋。它確定只有當出現負號(TimeSpanStyles.None)時,輸入是否被解釋爲負時間間隔,或者是否始終解釋爲負時間間隔(TimeSpanStyles.AssumeNegative)。如果不使用TimeSpanStyles.AssumeNegative,則格式必須包含一個文字負號符號(例如「 - 」)才能成功解析負的時間間隔。

我嘗試以下方法:

TimeSpan.ParseExact("-0700", @"\-hhmm", null, TimeSpanStyles.None) 

但是它返回07:00:00。並且「0700」失敗。

如果我嘗試:

TimeSpan.ParseExact("-0700", "hhmm", null, TimeSpanStyles.None) 

它失敗了。

TimeSpan.ParseExact("0700", new string [] { "hhmm", @"\-hhmm" }, null, TimeSpanStyles.None) 

對於「0700」和「-0700」都不會失敗,但始終返回正值07:00:00。

它應該如何使用?

+1

作爲一種變通方法開始,如果你不能得到這個工作,你可以在[Noda Time](http://nodatime.org)中解析一個'Duration'。將看看我能用'TimeSpan'做什麼...... –

+0

感謝您的提示。但它是一個我不想要的簡單腳本和一個額外的庫,我寧願使用StartsWith(' - ')來代替。 –

+0

夠公平的。無論如何,我已經將它列入了我的答案,但主要是爲了其他讀者。 –

回答

3

看起來像這樣不支持。從custom TimeSpan format strings頁:

定製TimeSpan格式說明也不包括符號象徵,使您能夠陰性和陽性的時間間隔區分。要包含符號符號,必須使用條件邏輯構造格式字符串。其他字符部分包含一個示例。

雖然這看起來確實很奇怪。伊克。

正如我在評論中提到的,您可以使用我的Noda Time項目的Duration parsing這個;對於這種情況來說是過分的,但如果你在項目中有其他日期/時間的工作,它可能會有用。

例如:

var pattern = DurationPattern.CreateWithInvariantCulture("-hhmm"); 
var timeSpan = pattern.Parse("-0700").Value.ToTimeSpan(); 
+0

所以'styles'參數是無用的。你可以在前面加上'-'符號嗎? –

+0

@TN:有點沒用,是的。整個功能似乎有些欠缺,說實話...(我的意思是,風格有一個效果,但不是一個非常有用的 - 至少對於自定義模式,也許對標準模式更好...) –

+0

上面的例子是否會使用'7000'? –

0

它看起來像你煩人需要檢查自己是否具有領先的-

// tsPos = 07:00:00 
string pos = "0700"; 
TimeSpan tsPos = TimeSpan.ParseExact(pos, new string [] { "hhmm", @"\-hhmm" }, null, 
    pos[0] == '-' ? TimeSpanStyles.AssumeNegative : TimeSpanStyles.None); 

// tsNeg = -07:00:00    
string neg = "-0700"; 
TimeSpan tsNeg = TimeSpan.ParseExact(neg, new string [] { "hhmm", @"\-hhmm" }, null, 
    neg[0] == '-' ? TimeSpanStyles.AssumeNegative : TimeSpanStyles.None);