将时间字符串解析成十进制数?

5
在 .Net 中,是否有一种方法可以将例如 '2:45' 转换为十进制数 2.75?
示例:
decimal d = TimeToDecimal("2:45");
Console.WriteLine(d);

//output is 2.75

如果数据无效,例如分钟数<0<60或不符合h:m格式,则应引发异常。

谢谢


重复的问题:https://dev59.com/AW435IYBdhLWcg3whQg5 - joce
完全正确。"困难"在于DateTime.Parse()会抛出所需的异常。其余部分是关于除以60的问题。这是一个重复的内容。 - joce
2个回答

13
以下代码将输出 2.75
TimeSpan time = TimeSpan.Parse("2:45");
decimal d = (decimal) time.TotalHours;

Console.WriteLine(d);
请注意,TimeSpan.TotalHours 属性的类型为 double,而不是 decimal
TimeSpan.Parse 方法的文档中可以看到,如果“至少有一天、一小时、一分钟或一秒钟组件超出其有效范围”,它将抛出一个OverflowException异常,因此这应该能够为您处理输入验证。请参阅TimeSpan.TryParse 方法

4
private decimal TimeToDecimal(string Time)
{
    DateTime dt = DateTime.Parse(Time);
    decimal result = dt.Hour+ (dt.Minute / 60.0m);
    return result;
}

我认为你想让它这样读取:decimal result = dt.Hour + (dt.Minute / 60.0m); - rsbarro
我认为最好的解决方案是 decimal result = dt.Hour + (dt.Minute / 60.0m) + (dt.Second / 3600.0m); - K0D4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接