代码之家  ›  专栏  ›  技术社区  ›  Jürgen Steinblock

使用String.Format 在TimeSpan上输出不含毫秒的完整秒数

  •  15
  • Jürgen Steinblock  · 技术社区  · 14 年前

    假设我有以下代码:

    DateTime date1 = DateTime.Now();
    System.Threading.Thread.Sleep(2500);
    DateTime date2 = DateTime.Now();
    
    TimeSpan elapsed = date2.substract(date1);
    Console.WriteLine("> {0:hh:mm:ss}", elapsed);
    

    我期望的是:

    > 00:00:03
    

    我得到的是:

    > 00:00:02.5002500
    

    有没有办法使用字符串格式函数只返回整秒?

    elapsed = elapsed.Substract(TimeSpan.FromMiliseconds((double)Timespan.Miliseconds);
    

    7 回复  |  直到 9 年前
        1
  •  25
  •   Doctor Jones    14 年前

    Console.WriteLine("> {0:hh:mm:ss}", elapsed);
    

    Console.WriteLine("> {0:hh\\:mm\\:ss}", elapsed);
    

    .NET4允许您在Timespan中使用自定义格式字符串。您可以在MSDN上找到可用格式说明符的完整引用 Custom TimeSpan Format Strings 第页。

    这是MSDN的摘录 自定义TimeSpan格式字符串 页说明如何转义格式字符串中的“:”和“.”字符:

        2
  •  13
  •   Marnix van Valen    13 年前

    不幸的是,无法格式化 TimeSpan DateTime 价值观。但是,您可以进行快速转换,因为TimeSpan和DateTime都将其值存储为记号(在 Ticks 属性)。

    在代码中如下所示:

    Console.WriteLine("> {0:hh:mm:ss}", new DateTime(elapsed.Ticks));

    更新: 这适用于.NET 3.5及更早版本,.NET 4不支持格式化时间跨度。

        3
  •  4
  •   Uwe Keim    9 年前

    这个 TimeSpan 班级有 Hours , Minutes Seconds

    String.Format(CultureInfo.CurrentCulture, "{0}:{1}:{2}", 
        elapsed.Hours, 
        elapsed.Minutes, 
        elapsed.Seconds)
    

    得到你想要的格式。

    也许有更好的方法,但我还没有找到。

        4
  •  2
  •   Kyle Rosendo    14 年前

    DateTime date1 = DateTime.Now;
    System.Threading.Thread.Sleep(2500);
    DateTime date2 = DateTime.Now;
    
    TimeSpan elapsed = date2.Subtract(date1);
    
    string[] Split = elapsed.ToString().Split('.');
    
    string m = Split[0]; // Returns 00:00:02
    
        5
  •  2
  •   Justin    4 年前
    Timespan duration = endDateTime - startDateTime;
    duration.ToString("hh\\:mm\\:ss");
    
        6
  •  1
  •   Murph    14 年前

    嗯,这很糟糕(事实证明)-至少在.NET4.0之前

    如果你在这里: http://msdn.microsoft.com/en-us/library/1ecy8h51(v=VS.90).aspx

         span.Hours.ToString("00") + ":" + 
         span.Minutes.ToString("00") + ":" + 
         span.Seconds.ToString("00") + "."
    

        7
  •  -2
  •   Jürgen Steinblock    10 年前

    您可以这样做:

    dt.Subtract(TimeSpan.FromMilliseconds(dt.Millisecond)).ToString();
    
        8
  •  -5
  •   Rohan Kumar    9 年前

    下面的示例演示如何将格式说明符重写为输出。 [C#]

    // create date time 2008-03-09 16:05:07.123    
    DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);    
    String.Format("{0:y yy yyy yyyy}", dt);  // "8 08 008 2008"   year    
    String.Format("{0:M MM MMM MMMM}", dt);  // "3 03 Mar March"  month    
    String.Format("{0:d dd ddd dddd}", dt);  // "9 09 Sun Sunday" day    
    String.Format("{0:h hh H HH}",     dt);  // "4 04 16 16"      hour 12/24
    String.Format("{0:m mm}",          dt);  // "5 05"            minute
    String.Format("{0:s ss}",          dt);  // "7 07"            second    
    String.Format("{0:f ff fff ffff}", dt);  // "1 12 123 1230"   sec.fraction    
    String.Format("{0:F FF FFF FFFF}", dt);  // "1 12 123 123"    without zeroes    
    String.Format("{0:t tt}",          dt);  // "P PM"            A.M. or P.M.    
    String.Format("{0:z zz zzz}",      dt);  // "-6 -06 -06:00"   time zone