2012-04-18 95 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)); 
     } 
    }