我的问题是如何在(ss,十分之一秒)转换时间跨度(m:ss,十分之一秒)时修复失败;
问题是输出如果这是完全错误的。
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。
答案 0 :(得分:3)
请勿尝试自行解析时间字符串。请改用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
的char(unicode)值而不是数值。所以你必须先解析char。但是,如果您尝试输入11:04.13
之类的字符串,则代码将失败。只是不要费心解析这个问题。它已经在框架中了。不要重新发明轮子。
答案 1 :(得分:1)
将乘法移到括号外:
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)));
答案 2 :(得分:0)
如果不关心小时,那么你必须将零传递给它。流底C#代码:
var timeInString = "0:1:09.01";
var timeInTimeSpan = TimeSpan.Parse(timeInString);