показывать время - PullRequest
       39

показывать время

12 голосов
/ 15 февраля 2012

Извините за грубый код, я пытаюсь отобразить продолжительность видео с учетом времени в секундах.У меня был шаг ниже, но он не работает должным образом.

Я хочу, чтобы он просто отображался хорошо - т.е. должен отображать 9m: 59s, а не 09m: 59s.

Если часы равны нулю, не отображатьчасы, если минуты равны нулю, не отображать минуты.

public static string GetTimeSpan(int secs)
{
    TimeSpan t = TimeSpan.FromSeconds(secs);

    string answer;
    if (secs < 60)
    {
        answer = string.Format("{0:D2}s", t.Seconds);
    }
    else if (secs < 600)//tenmins
    {
        answer = string.Format("{0:m}m:{1:D2}s", t.Minutes, t.Seconds);

    }
    else if (secs < 3600)//hour
    {
        answer = string.Format("{0:mm}m:{1:D2}s", t.Minutes, t.Seconds);
    }
    else
    {
        answer = string.Format("{0:h}h:{1:D2}m:{2:D2}s",
                                    t.Hours,
                                    t.Minutes,
                                    t.Seconds);
    }

    return answer;
}

Ответы [ 4 ]

26 голосов
/ 15 февраля 2012

Что-то вроде:

public static string PrintTimeSpan(int secs)
{
   TimeSpan t = TimeSpan.FromSeconds(secs);
   string answer;
   if (t.TotalMinutes < 1.0)
   {
     answer = String.Format("{0}s", t.Seconds);
   }
   else if (t.TotalHours < 1.0)
   {
     answer = String.Format("{0}m:{1:D2}s", t.Minutes, t.Seconds);
   }
   else // more than 1 hour
   {
     answer = String.Format("{0}h:{1:D2}m:{2:D2}s", (int)t.TotalHours, t.Minutes, t.Seconds);
   }

   return answer;
}
3 голосов
/ 15 февраля 2012

Я думаю, что вы можете упростить это, удалив аспект формата «D2», и тогда вам не понадобится специальный случай для опции менее десяти минут. В основном просто с помощью

string.Format("{0}m:{1}s", t.Minutes, t.Seconds);

даст вам одну или две цифры, как требуется. Итак, ваш последний случай:

string.Format("{0}h:{1}m:{2}s", t.Hours, t.Minutes, t.Seconds);
2 голосов
/ 15 февраля 2012

Согласно msdn попробуйте это:

if (secs < 60)
{
    answer = t.Format("s");
}
else if (secs < 600)//tenmins
{
    answer = t.Format("m:s");
}
// ...
1 голос
/ 04 июля 2017
readonly static Char[] _colon_zero = { ':', '0' };
// ...

var ts = new TimeSpan(DateTime.Now.Ticks);
String s = ts.ToString("h\\:mm\\:ss\\.ffff").TrimStart(_colon_zero);
.0321
6.0159
19.4833
8:22.0010
1:04:2394
19:54:03.4883
...