Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将精确持续时间(mm:ss,xx)转换为ss,xx_C#_Time_Formatting_Type Conversion - Fatal编程技术网

C#将精确持续时间(mm:ss,xx)转换为ss,xx

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

我的问题是如何修复转换时间跨度(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)));

输出必须为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#代码: