我有一个int来存储我在计时器上剩下的秒数,我想要做的是将其转换为一个漂亮的时间格式,例如
如果计时器是604:
"10 minutes and 4 seconds"
如果计时器是2942
"49 minutes and 2 seconds"
如果计时器是61
"1 minute and 1 second"
除了运行大量if检查以将其转换为?之外,还有一种简单的方法吗?
答案 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允许您以多种方式调整格式,并且该软件包还支持多种语言。