我正在创建一个可以在划船机上计算时间的应用程序,作为我自己的一个小实验。您可以使用这些方程式计算分割(使用500米所需的时间),总距离或总时间......
距离=(时间/分割)* 500
split = 500 *(时间/距离)
时间=分裂*(距离/ 500)
距离以米为单位(这就是简单的位),但两次我希望以mm:ss.fff(例如:2:00.00)的格式显示它。
我的第一个问题是当我尝试使用TimeSpan parsedSplitTime = TimeSpan.ParseExact(splitInput, "c", provider);
解析输入的字符串时它需要字符串...
A)在分钟前面有一个0,所以它不能输入为2:00.00并且必须输入为02:00.00,为了便于使用不是很好而且我不能将它添加到问题中的字符串B作为用户可以输入例如12分钟。
B)我必须在字符串的前面加上“0.00:”才能格式化
string splitInput = "0.00:" + enteredSplit.Text;
我的第二个问题是,我不认为我的计算方式是非常有效的,当我将它转换回字符串放入文本框时,它没有格式化我想要的方式(见帖子的开头)
这是我用来计算总时间的代码。
string splitInput = "0.00:" + enteredSplit.Text;
TimeSpan parsedSplitTime = TimeSpan.ParseExact(splitInput, "c", provider);
double distanceAsInt = Int64.Parse(enteredDistance.Text);
distanceAsInt = distanceAsInt / 500;
double totalTimeMilli = parsedSplitTime.TotalMilliseconds * distanceAsInt;
TimeSpan timeReadable = TimeSpan.FromMilliseconds(totalTimeMilli).;
string enteredTimeAsString = timeReadable.ToString();
enteredTimeAsString = enteredTimeAsString.Remove(0, 3);
enteredTime.Text = $"{enteredTimeAsString}.00";
感谢您提前帮助!如果你想要更多的细节只是评论和生病添加在这里!
输入是手动输入,但我暗示它将被放入0:00.00,但你现在必须做00:00.00我希望输出为0:00.00
提供者定义CultureInfo provider = CultureInfo.InvariantCulture;
它以字符串形式输入
解决此问题的一种方法是首先解析输入(分钟,秒和毫秒),然后使用需要数天,小时,分钟,秒和毫秒的构造函数从该输入创建TimeSpan
对象。
由于我们不知道输入的确切格式,我们可以使用string.Split
将字符串分成我们所知的部分,使用:
字符作为分隔符:
/// <summary>
/// Returns a timespan from an input string that specifies minutes:seconds
/// </summary>
/// <param name="input">"minutes:seconds", where seconds can be a double</param>
/// <returns>Timespan representation of the input string</returns>
private static TimeSpan ParseMinSecMS(string input)
{
if (string.IsNullOrWhiteSpace(input))
throw new ArgumentException("input cannot be null, empty, or whitespace");
var parts = input.Split(':');
var minutes = "00";
string seconds;
if (parts.Length > 1)
{
minutes = parts[0].PadLeft(2, '0');
seconds = parts[1].PadRight(1, '0');
}
else
{
seconds = parts[0].PadRight(1, '0');
}
return TimeSpan.Parse($"0.00:{minutes}:{seconds}");
}
然后您可以像这样使用此方法:
private static void Main(string[] args)
{
var inputs = new List<string>
{
"2",
"2.3",
"1:2.34",
"25:32.908",
"1.2345"
};
foreach (var input in inputs)
{
Console.WriteLine(ParseMinSecMS(input).ToString("mm\\:ss\\.ffff"));
}
GetKeyFromUser("\nDone! Press any key to exit...");
}
产量