display timespan nicely

荒凉一梦 提交于 2019-12-09 14:50:21

问题


Excuse the rough code, I'm trying to display the duration of videos given the time in seconds. I've had a go below but it's not working properly.

I want it to just display nicely - i.e should display 9m:59s not 09m:59s.

If hours are zero dont display hours, if minutes are zero dont display minutes.

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;
}

回答1:


Something like:

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;
}



回答2:


I think you can simplify this by removing the "D2" aspect of the format and then you won't need a special case for the under ten minutes option. Basically just using

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

will get you one or two digits as required. So your final case is:

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



回答3:


According to msdn try this:

if (secs < 60)
{
    answer = t.Format("s");
}
else if (secs < 600)//tenmins
{
    answer = t.Format("m:s");
}
// ...



回答4:


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


来源:https://stackoverflow.com/questions/9292014/display-timespan-nicely

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!