C#将精确持续时间(mm:ss,xx)转换为ss,xx
我的问题是如何修复转换时间跨度(m:ss,10秒)时出现的故障(ss,10秒) 问题是,如果这是完全错误的,那么输出将是错误的C#将精确持续时间(mm:ss,xx)转换为ss,xx,c#,time,formatting,type-conversion,C#,Time,Formatting,Type Conversion,我的问题是如何修复转换时间跨度(m:ss,10秒)时出现的故障(ss,10秒) 问题是,如果这是完全错误的,那么输出将是错误的 timeInString = "1:09.01"; tmpData.SetTimeDG2((Convert.ToInt32(timeInString[0] * 60) + Convert.ToInt32(timeInString.Substring(2, 2)) + (Convert.ToDouble(timeInString.Substring(5, 2))/ 100
timeInString = "1:09.01";
tmpData.SetTimeDG2((Convert.ToInt32(timeInString[0] * 60) + Convert.ToInt32(timeInString.Substring(2, 2)) + (Convert.ToDouble(timeInString.Substring(5, 2))/ 100)));
输出必须为69,01,但为2949.01。将乘法移到括号外:
Convert.ToInt32(timeInString[0]) * 60
根本原因
“1”
的ASCII值为49,这是导致错误的关键,也是导致此操作失败的原因
您可以从以下代码开始:
Convert.ToInt32(timeInString[0] * 60)
这将采用单个字符串timeInString[0]
,并将其作为ASCII字符进行乘法处理。也就是说,因为C#看到乘法符号,所以它期望可乘法的东西作为操作数。它看到字符串并认为,“这是一个幕后数字;让我们把它当作一个。”这等于说:
Convert.ToInt32(49 * 60)
对整个表达式求值,得到(49*60)+9+0.01=2949.01
您需要做的是将*60
移到括号外
tmpData.SetTimeDG2((Convert.ToInt32(timeInString[0]) * 60 + Convert.ToInt32(timeInString.Substring(2, 2)) + (Convert.ToDouble(timeInString.Substring(5, 2))/ 100)));
将乘法移到括号外:
Convert.ToInt32(timeInString[0]) * 60
根本原因
“1”
的ASCII值为49,这是导致错误的关键,也是导致此操作失败的原因
您可以从以下代码开始:
Convert.ToInt32(timeInString[0] * 60)
这将采用单个字符串timeInString[0]
,并将其作为ASCII字符进行乘法处理。也就是说,因为C#看到乘法符号,所以它期望可乘法的东西作为操作数。它看到字符串并认为,“这是一个幕后数字;让我们把它当作一个。”这等于说:
Convert.ToInt32(49 * 60)
对整个表达式求值,得到(49*60)+9+0.01=2949.01
您需要做的是将*60
移到括号外
tmpData.SetTimeDG2((Convert.ToInt32(timeInString[0]) * 60 + Convert.ToInt32(timeInString.Substring(2, 2)) + (Convert.ToDouble(timeInString.Substring(5, 2))/ 100)));
不要试图自己解析时间字符串。改用
TimeSpan
:
string timeInString = "1:09.01";
TimeSpan interval;
TimeSpan.TryParseExact(timeInString, @"m\:ss\.ff", null, out interval);
Console.WriteLine("Seconds {0}", interval.TotalSeconds);
代码的问题是,
timeInString[0]*60
使用的是1
的字符(unicode)值,而不是数值。所以你必须先解析这个字符。但是,如果您尝试输入类似11:04.13
的字符串,代码将失败。只是不要费心自己去解析这个。它已经在框架中了。不要重新发明轮子。不要试图自己解析时间字符串。改用TimeSpan
:
string timeInString = "1:09.01";
TimeSpan interval;
TimeSpan.TryParseExact(timeInString, @"m\:ss\.ff", null, out interval);
Console.WriteLine("Seconds {0}", interval.TotalSeconds);
代码的问题是,
timeInString[0]*60
使用的是1
的字符(unicode)值,而不是数值。所以你必须先解析这个字符。但是,如果您尝试输入类似11:04.13
的字符串,代码将失败。只是不要费心自己去解析这个。它已经在框架中了。不要重新发明轮子。你错过了一个小时
若不在乎小时数,那个么你们就必须把零传递给它。流底C#代码:
你错过了一个小时 若不在乎小时数,那个么你们就必须把零传递给它。流底C#代码: