5

我确定这一定很简单,但我不知道如何在 Google 中正确表达它......

我有一个配置,它有一个字段:

TimeToPoll="1d"

现在我想做类似的事情

TimeSpan.Parse(TimeToPoll);

返回一天的时间跨度。

在 C# 中

编辑:我正在寻找一种允许解析“1d”以及“1s”或“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}
4

3 回答 3

5

这是我的决议:

    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));
        }
    }
于 2012-04-19T12:26:15.903 回答
0

d不需要,这是您的解析失败的原因。

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

更新:

对于您要执行的操作,没有内置支持。您需要编写自己的解析器。

于 2012-04-18T11:14:05.893 回答
0

您应该将值以TimeSpan.Parse可以使用的格式之一存储在配置文件中。该页面上有几个示例。

编辑:示例位于页面底部的代码中。

于 2012-04-18T11:19:48.170 回答