代码之家  ›  专栏  ›  技术社区  ›  AntonioCS

把180改成03:00的简单方法

  •  2
  • AntonioCS  · 技术社区  · 16 年前

    嘿!我正在尝试将秒数更改为正确的时间戳格式。 就像我把180改成03:00一样

    private void writeTime(int tempo)
            {
                TimeSpan otempo = new TimeSpan(0, 0, tempo);        
    
    
                string minutos = ((otempo.Minutes <= 9) ? "0" : "") + otempo.Minutes.ToString();
                string segundos = ((otempo.Seconds <= 9) ? "0" : "") + otempo.Seconds.ToString();
    
                label1.Text = minutos + ":" + segundos;
    
                centrarLabel();
            }
    

    这给了我180到一个适当的格式。我只想知道有没有更简单的方法。 这个函数可能被多次调用,我不想每次都创建TimeSpan的新实例,因为我认为这可能会对内存造成问题等等。我尝试使用DateTime类,但是…我只是不明白我怎么能通过它的秒,它给了我正确的格式:(

    我对C_不是很在行。我真的在努力学习:) 谢谢

    5 回复  |  直到 16 年前
        1
  •  3
  •   thinkbeforecoding    16 年前

    使用

    label.Text = string.Format("{0:d2}:{1:d2}", otempo.Minutes, otempo.Seconds);
    

    如果你的分钟数可以增加到60,你可以使用otempo.totalminutes…

    别忘了还要指定区域性。

        2
  •  3
  •   Tamas Czinege    16 年前
    TimeSpan t = TimeSpan.FromSeconds(180);
    string s = String.Format("{0:00}:{1:00}", t.Hours, t.Seconds);
    
        3
  •  3
  •   Marc Gravell    16 年前
        int tempo = 180;
        TimeSpan time = TimeSpan.FromSeconds(tempo);
        string txt = string.Format(
            "{0:00}:{1:00}", time.Minutes, time.Seconds);
    

    (编辑)正如已经观察到的那样-与 TimeSpan ,因为它是 struct . 但是,如果你想变得多疑:

    int tempo = 180;
    string txt = new StringBuilder(5)
        .Append((tempo / 60).ToString().PadLeft(2, '0')).Append(':')
        .Append((tempo % 60).ToString().PadLeft(2, '0')).ToString();
    
        4
  •  1
  •   ShuggyCoUk    16 年前

    TimeSpan是一个结构,它(在本例中)是在堆栈上分配的,因此成本可以忽略不计,特别是考虑到无论如何必须至少分配一个字符串,这是代价高昂的部分。

    TimeSpan.FromSeconds(tempo).ToString();
    

    只要180秒->“00:03:00”即可满足您的需要

        5
  •  1
  •   Matthew Crumley    16 年前

    就像其他人提到的,可能不需要担心创建新的时间跨度来进行转换,但是不创建任何临时对象的最简单的格式化方法是:

    String.Format("{0:00}:{1:00}", tempo / 60, tempo % 60)