Gibt es eine einfache Möglichkeit, dies zu tun, außer viele If-Checks zu laufen, um es zu konvertieren?
Nein, leider müssen Sie codieren.
Aber ich denke, der Code unten wird Ihren Bedarf erfüllen.
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();
}
es zu benutzen:
NiceTimeFormat(604);
NiceTimeFormat(2942);
NiceTimeFormat(61);
Aber dies wird immer Minuten, Sekunden und ms enthalten, ich will es nur zeigen, was benötigt wird, wenn Sekunden <60 dann seine 0 Minuten, also nur Sekunden und ms zeigen. – Ashkru
@Ashkru schreibe eine if-Anweisung: 'if (Zahl <= 60) {schönFormatted = Zeichenkette.Format (" {0: D2} Sekunden und {1: D3} Millisekunden ", t.Sekunden, t.Millisekunden);}' – CodingYoshi
Ignoriert die Millisekunden, dann für 61 Sekunden die resultierende Zeichenfolge wird "1 Minuten und 1 Sekunden". Das gewünschte Ergebnis ist jedoch "1 Minute und 1 Sekunde" (keine Pluralisierung). –