2017-02-26 57 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);