2017-02-26 58 views
1

我有一个存储了多少秒我都留下了计时器的INT,我想要做的是将其转换成一个不错的时间格式,因此,例如将int转换为漂亮的时间格式?

如果计时器是604:

"10 minutes and 4 seconds" 

如果定时器是2942

"49 minutes and 2 seconds" 

如果定时器为61

"1 minute and 1 second" 

有没有一个简单的方法来做到这一点,而不是运行大量的如果检查将其转换为?

回答

1

的NuGet包Humanizer旨在创建日期为人类可读的字符串,时间等,尤其是它可以在TimeSpan转换成一个人性化的字符串。

using Humanizer;添加到源文件的顶部会为TimeSpan添加一个扩展方法,该方法将按照您的期望完全返回区间。例如。

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让你来调整格式在许多方面和包也支持多种语言。

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位数,所以你可以把你喜欢的任何东西。

+0

但是,这将始终包括分钟,秒和毫秒,我希望它只显示需要什么,如果秒<60那么它的0分钟,所以只显示秒和毫秒。 – Ashkru

+0

@Ashkru写一条if语句:'if(number <= 60){nicelyFormatted = string.Format(“{0:D2} seconds and {1:D3} miliseconds”,t.Seconds,t.Milliseconds);}' – CodingYoshi

+0

忽略毫秒然后61秒结果字符串将是'1分1秒'。然而,期望的结果是“1分1秒”(没有复数)。 –

1

是否有一个简单的方法来执行此操作,而不是运行大量如果检查将其转换为?

不,不幸的是,您将不得不编码。

但我认为下面的代码将满足您的需求。

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);