C# 从包含格式的字符串解析TimeSpan

C# 从包含格式的字符串解析TimeSpan,c#,.net,parsing,timespan,C#,.net,Parsing,Timespan,我相信这一定很简单,但我不知道如何在谷歌中正确地表达它 我有一个配置,它有一个字段: 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 {

我相信这一定很简单,但我不知道如何在谷歌中正确地表达它

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

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}

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

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

更新:


对于您希望做的事情,没有内置的支持。您需要编写自己的解析器。

您应该以可以使用的格式之一将值存储在配置文件中。那一页上有几个样本

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

这是我的解决方案:

    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));
        }
    }

很抱歉,我已经更新了。检查此链接:只需将设置中的字符串转换为TimeSpan.TryParse()接受的格式字符串。或者更改设置字符串本身。小心.NET依赖关系,TryParse()仅在.NET 4中可用。好的,谢谢。我可能会想出一个解决办法。因为这将使配置更易于实现@马修坎蒂-我不明白。我写的东西是有效的。啊,的确如此。很抱歉我只是没想到会发生这么模棱两可的事。我认为它会返回尽可能小的值。