C# 将时间字符串解析为秒

C# 将时间字符串解析为秒,c#,parsing,C#,Parsing,我从python解析了一个函数,它将“5m”转换为300秒(整数)。我的问题是关于我做的正则表达式,因为我知道它比其他任何东西都慢。将时间段的整数部分和字符串部分合并到单独的字符串中的最佳方法是什么?基本上是我做的,但效率很高。在我的情况下,这并不重要,但我喜欢严格 def parse_时间段(时间段): 金额=整数(时间范围[0:-1]) 单位=时间范围[-1] 如果“y”==单位: 比例=60*60*24*365 elif'M'==单位: 比例=60*60*24*30 elif‘w’==单位

我从python解析了一个函数,它将“5m”转换为300秒(整数)。我的问题是关于我做的正则表达式,因为我知道它比其他任何东西都慢。将
时间段的整数部分
和字符串部分合并到单独的字符串中的最佳方法是什么?基本上是我做的,但效率很高。在我的情况下,这并不重要,但我喜欢严格

def parse_时间段(时间段):
金额=整数(时间范围[0:-1])
单位=时间范围[-1]
如果“y”==单位:
比例=60*60*24*365
elif'M'==单位:
比例=60*60*24*30
elif‘w’==单位:
比例=60*60*24*7
elif'd'==单位:
比例=60*60*24
elif‘h’==单位:
比例=60*60
elif'm'==单位:
比例=60
elif's'==单位:
比例=1
其他:
raise NotSupported('不支持时间段单位{}'。格式(单位))
退货金额*比例
public static int ParseTimeFrameToSeconds(此字符串时间段)
{
var amount=Convert.ToInt32(Regex.Match(timeframe,@“\d+”).Value);
var单位=正则表达式匹配(时间范围,@“[a-zA-Z]+”)。值;
int标度;
如果(单位=“y”)
比例=60*60*24*365;
否则,如果(单位=“M”)
刻度=60*60*24*30;
否则,如果(单位=“w”)
刻度=60*60*24*7;
否则,如果(单位=“d”)
刻度=60*60*24;
否则,如果(单位=“h”)
比例=60*60;
否则,如果(单位=“m”)
比例=60;
否则,如果(单位=“s”)
比例=1;
其他的
抛出新的NotSupportedException($“不支持时间段单位{unit}”);
返回量*刻度;
}
无需为此使用。只需翻译现有python代码的功能:访问输入的子字符串

var amount    = int.Parse(timeframe.Substring(0, timeframe.Length - 1));
var unit      = timeframe.Substring(timeframe.Length - 1);

或者,如果您有适当的时间跨度,您可以将字符串转换为
TimeSpan
,然后使用
TotalSeconds
属性

这也将消除你所有的if-else-if

if (TimeSpan.TryParse(timeframe, out var timeSpan))
{
   Console.WriteLine(timeSpan.TotalSeconds);
}

*编辑:按原样,假设每年365天,每月30天。无论如何,你的计算可能有误导性。

谢谢<代码>变量金额=int.Parse(时间范围[0..^1]);风险值单位=时间范围[^1..]我试着将“5m”转换为TimeSpan,但它无法正常工作。