将int转换为漂亮的时间格式?

时间:2017-02-26 19:06:51

标签: c# timer

我有一个int来存储我在计时器上剩下的秒数,我想要做的是将其转换为一个漂亮的时间格式,例如

如果计时器是604:

"10 minutes and 4 seconds"

如果计时器是2942

"49 minutes and 2 seconds"

如果计时器是61

"1 minute and 1 second"

除了运行大量if检查以将其转换为?之外,还有一种简单的方法吗?

3 个答案:

答案 0 :(得分:3)

TimeSpan t = TimeSpan.FromSeconds(604);
string nicelyFormatted = string.Format("{0:D2} minutes and {1:D2} seconds and {2:D3} miliseconds",
    t.Minutes,
    t.Seconds,
    t.Milliseconds);

如果你需要,我还包括毫秒。 D2表示2位数字,因此您可以放置​​您喜欢的任何内容。

答案 1 :(得分:1)

  

除了运行大量if检查以将其转换为?之外,还有一种简单的方法吗?

不,不幸的是,你必须编码。

但我认为以下代码可以满足您的需求。

public static void TimeFormat(StringBuilder format, string name, ref int delta, int time)
{
    if (delta >= time)
    {
        if (format.Length > 0)
            format.Append(" and ");

        format.Append(delta / time).Append(" ").Append(name).Append((delta >= time * 2 ? "s" : ""));
        delta %= time;
    }
}

public static string NiceTimeFormat(int seconds)
{
    StringBuilder format = new StringBuilder();

    const int second = 1;
    const int minute = 60 * second;
    const int hour = 60 * minute;
    const int day = 24 * hour;
    const int month = 30 * day;
    const int year = 365 * day;

    int delta = seconds;

    TimeFormat(format, "year", ref delta, year);
    TimeFormat(format, "month", ref delta, month);
    TimeFormat(format, "day", ref delta, day);
    TimeFormat(format, "hour", ref delta, hour);
    TimeFormat(format, "minute", ref delta, minute);
    TimeFormat(format, "second", ref delta, second);

    return format.ToString();
}

使用它:

NiceTimeFormat(604);
NiceTimeFormat(2942);
NiceTimeFormat(61);

答案 2 :(得分:1)

NuGet包Humanizer旨在为日期,时间等创建人类可读的字符串。特别是它可以将TimeSpan转换为人性化的字符串。

using Humanizer;添加到源文件的顶部会向TimeSpan添加一个扩展方法,该方法将完全按照您的意愿返回间隔。 E.g。

TimeSpan.FromSeconds(604).Humanize(precision: 2, collectionSeparator: " and ")

将返回

10 minutes and 4 seconds

Humanizer处理多元化(当然):

TimeSpan.FromSeconds(61).Humanize(precision: 2, collectionSeparator: " and ")

返回

1 minute and 1 second

Humanizer允许您以多种方式调整格式,并且该软件包还支持多种语言。