我有一個存儲了多少秒我都留下了計時器的INT,我想要做的是將其轉換成一個不錯的時間格式,因此,例如將int轉換爲漂亮的時間格式?
如果計時器是604:
"10 minutes and 4 seconds"
如果定時器是2942
"49 minutes and 2 seconds"
如果定時器爲61
"1 minute and 1 second"
有沒有一個簡單的方法來做到這一點,而不是運行大量的如果檢查將其轉換爲?
我有一個存儲了多少秒我都留下了計時器的INT,我想要做的是將其轉換成一個不錯的時間格式,因此,例如將int轉換爲漂亮的時間格式?
如果計時器是604:
"10 minutes and 4 seconds"
如果定時器是2942
"49 minutes and 2 seconds"
如果定時器爲61
"1 minute and 1 second"
有沒有一個簡單的方法來做到這一點,而不是運行大量的如果檢查將其轉換爲?
的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讓你來調整格式在許多方面和包也支持多種語言。
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位數,所以你可以把你喜歡的任何東西。
是否有一個簡單的方法來執行此操作,而不是運行大量如果檢查將其轉換爲?
不,不幸的是,您將不得不編碼。
但我認爲下面的代碼將滿足您的需求。
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);
但是,這將始終包括分鐘,秒和毫秒,我希望它只顯示需要什麼,如果秒<60那麼它的0分鐘,所以只顯示秒和毫秒。 – Ashkru
@Ashkru寫一條if語句:'if(number <= 60){nicelyFormatted = string.Format(「{0:D2} seconds and {1:D3} miliseconds」,t.Seconds,t.Milliseconds);}' – CodingYoshi
忽略毫秒然後61秒結果字符串將是'1分1秒'。然而,期望的結果是「1分1秒」(沒有複數)。 –