在体育应用中与时俱进C#

问题描述 投票:1回答:1

我正在创建一个可以在划船机上计算时间的应用程序,作为我自己的一个小实验。您可以使用这些方程式计算分割(使用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;

它以字符串形式输入

c# time
1个回答
1
投票

解决此问题的一种方法是首先解析输入(分钟,秒和毫秒),然后使用需要数天,小时,分钟,秒和毫秒的构造函数从该输入创建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...");
}

产量

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.