2015-10-14 41 views
3

我需要解析一個指定環境時區的字符串。它看起來像+0100-0530,指定與UTC時區的偏移量。TimeSpan's ParseExact()中的+/-符號?

在這些字符串中,加號/減號是總是那裏。我想用TimeSpan.ParseExact()方法解析這個方法,我很確定有一種方法。 Parse()方法知道如何處理減號,但the ParseExact() method's documentation沒有提及任何關於標誌的內容。

到目前爲止,我使用的格式是hhmm,但是這需要以處理+/-符號的內容作爲前綴。任何人都可以請我指出正確的方向?

+0

你能寫一個字符串的例子嗎? – mybirthname

+3

我很想念TimeSpan與TimeZone有什麼關係? –

+0

這些時區偏移屬於'DateTime',而不是'TimeSpan'。 – Joey

回答

4

你可以檢查它是否與-開始,然後應用適當的格式字符串:

string[] timespans = { "-0530", "+0100" }; 
foreach (string timespan in timespans) 
{ 
    bool isNegative = timespan.StartsWith("-"); 
    string format = isNegative ? "\\-hhmm" : "\\+hhmm"; 
    TimeSpanStyles tss = isNegative ? TimeSpanStyles.AssumeNegative : TimeSpanStyles.None; 
    TimeSpan ts; 
    if (TimeSpan.TryParseExact(timespan, format, null, tss, out ts)) 
    { 
     Console.WriteLine("{0} successfully parsed to: {1}", timespan, ts); 
    } 
    else 
    { 
     Console.WriteLine("Could not be parsed: {0}", timespan); 
    } 
} 

注意,我TimeSpanStyles.AssumeNegativeTryParseExact使用,否則,時間跨度將始終爲正,即使他們以負前綴。

1

這應該時區偏移工作:

var dt = DateTime.ParseExact("14-oct-2015 08:22:00 +01:00","dd-MMM-yy HH:mm:ss zzz", culture); 

但對於日期時間,時間跨度不這隻作品,時區信息不會在時間跨度弦支持。

2

看起來不支持。來自Custom TimeSpan Format Strings;

定製TimeSpan格式說明也不包括標誌符號 ,使您能夠陰性和陽性的時間間隔 之間區分。要包含符號符號,必須使用條件邏輯構造一個格式 字符串。 Other Characters section 包括一個例子。

但看起來像NodaTime支持這一點。在Patterns for Duration values頁面中,它具有+-作爲字符部分。

enter image description here

using NodaTime.Text; 

namespace Program 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DurationPattern pattern = DurationPattern.CreateWithInvariantCulture("+hhmm"); 
      TimeSpan timeSpan = pattern.Parse("+0100").Value.ToTimeSpan(); 
     } 
    } 
} 

enter image description here

這裏一個demonstration