2012-04-18 87 views
5

我敢肯定,這一定是簡單的,但我無法弄清楚如何正確地在谷歌字呢?解析時間跨度包括格式

我其中有一個領域的配置:

TimeToPoll="1d" 

現在我想要做的事

TimeSpan.Parse(TimeToPoll); 

返回每一天的時間跨度。

在C#

編輯: 我在尋找它允許解析「一維」以及「1」或「1Y」的方法等等。這可能嗎?

含義:

 "1d" parses to {1.00:00:00} 
    "1h" parses to {0.01:00:00} 
    "1m" parses to {0.00:01:00} 
    "1s" parses to {0.00:00:01} 
+0

我道歉,我已經更新。 – 2012-04-18 11:11:32

+0

爲什麼在'TimeToPoll'中輸入d: – Marshal 2012-04-18 11:15:46

+0

檢查以下鏈接:http://msdn.microsoft.com/en-us/library/system.timespan.days.aspx – Milee 2012-04-18 11:54:54

回答

0

d不需要和你解析失敗的原因。

var oneDay = TimeSpan.Parse("1"); 

更新:

您正在找什麼做的,有支持沒有內置。你需要編寫你自己的解析器。

+0

這將需要 - TimeSpan.FromDays(double.Parse(「1」)); – 2012-04-18 13:22:57

+0

@MatthewCanty--我沒有關注。我寫的是有效的。 – Oded 2012-04-18 13:26:18

+0

啊,所以它。抱歉。我只是沒有想到可能會發生模棱兩可的事情。我認爲它會返回最小的可能值。 – 2012-04-18 13:29:57

0

您應該將您的值以TimeSpan.Parse可以使用的其中一種格式存儲在配置文件中。該頁面上有幾個樣本。

編輯:這些例子是在朝向頁面底部的代碼中。

4

這是我的決心:

public static TimeSpan ConvertToTimeSpan(this string timeSpan) 
    { 
     var l = timeSpan.Length - 1; 
     var value = timeSpan.Substring(0, l); 
     var type = timeSpan.Substring(l, 1); 

     switch (type) 
     { 
      case "d": return TimeSpan.FromDays(double.Parse(value)); 
      case "h": return TimeSpan.FromHours(double.Parse(value)); 
      case "m": return TimeSpan.FromMinutes(double.Parse(value)); 
      case "s": return TimeSpan.FromSeconds(double.Parse(value)); 
      case "f": return TimeSpan.FromMilliseconds(double.Parse(value)); 
      case "z": return TimeSpan.FromTicks(long.Parse(value)); 
      default: return TimeSpan.FromDays(double.Parse(value)); 
     } 
    }