我有一个存储了多少秒我都留下了计时器的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秒”(没有复数)。 –