我正在写这个问题,是为了寻求最好的方法。我的程序中有许多这样的程序,并且我想创建一个方法来将包含秒计时器的Int32转换为格式正确的字符串。

因此,例如,如果我的计时器int在at说一个随机数,例如16429
这将是:

4 hours, 32 minutes and 9 seconds


如果是600,则为:

10 minutes


如果是60,那将是

1 minute


如果是172801,它将是

2 days and 1 second


如果是32,那将是

32 seconds


我希望每个单词末尾的“ s”(例如“ minute”,“ second”和“ day”)仅在不等于1时才放S,因此实际上并不需要正确地发音。我也只希望添加几天和几小时以及其他需要的东西,因此,如果计时器以秒为单位低于1天,则仅显示小时,分钟和秒或所需的时间。

实现这样的目标的最佳方法是什么?我在下面有此功能,但它非常凌乱,只能持续几分钟和几秒钟,而不是几小时或几天:

public static string GetConvertedTime(int timer)
{
    int Minutes = timer / 60;
    int Seconds = timer - Minutes * 60;

    if (timer < 60)
    {
        string secs = (Seconds != 1) ? "s" : "";
        return "" + timer + " second" + secs;
    }

    else
    {
        if (Seconds < 1)
        {
            string mins = (Minutes != 1) ? "s" : "";
            return "" + Minutes + " minute" + mins;
        }
        else
        {
            string mins = (Minutes != 1) ? "s" : "";
            string secs = (Seconds != 1) ? "s" : "";
            return "" + Minutes + " minute" + mins + " and " + Seconds + " second" + secs;
        }
    }
}


最好的方法到底是什么?

最佳答案

“最佳方式”绝对是主观的。 DRY通常是最好的,考虑到本地化和非正规复数形式通常是最好的,使其简短且活泼通常是最好的:

public static string FriendlyDuration(int seconds) {
    int[] divisors = { 60 * 60 * 24, 60 * 60, 60 , 1};
    string[] language = { ", ", " and ", "days", "day", "hours", "hour", "minutes", "minute", "seconds", "second"};
    var parts = new List<string>();
    for (int part = 0; part < divisors.Length; ++part) {
        int count = seconds / divisors[part];
        if (count == 0) continue;
        string unit = language[part*2 + (count == 1 ? 3 : 2)];
        parts.Add(string.Format("{0} {1}", count, unit));
        seconds -= count * divisors[part];
    }
    var result = string.Join(language[0], parts.ToArray());
    if (parts.Count > 1) {
        var ix = result.LastIndexOf(language[0]);
        result = result.Substring(0, ix) + language[1] + result.Substring(ix + language[0].Length);
    }
    return result;
}

关于c# - C#:实现格式正确的时间字符串的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42632169/

10-17 03:05