我想在字符串中显示两个日期之间的经过的时间。

假设我有以下代码:

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

有没有一种方法可以使用String.format函数仅返回完整的秒?
我还试图用:

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

但这也不起作用,因为经过。

有帮助吗?

解决方案

更改

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

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

.NET 4允许您使用带有时间板的自定义格式字符串。您可以在MSDN上找到可用格式指定符的完整参考 定制时间板格式字符串 页。

您需要用“ ”逃脱“:”字符(除非您使用逐字字符串,否则必须逃脱其本身)。

此摘录来自MSDN 定制时间板格式字符串 页面解释了逃脱“:”和“”。格式字符串的字符:

自定义时间板格式指定符不包括占位符分离器符号,例如,这些符号将数小时,几小时的数小时或几秒钟与分数秒分开。相反,这些符号必须包含在自定义格式字符串中,作为字符串文字。例如,“ dd.hh:mm”将一个(。)定义为几天和小时之间的分离器,而结肠(:)在小时和分钟之间为分离器。

其他提示

不幸的是,不可能格式化 TimeSpan 以与一个相同的方式 DateTime 价值。但是,您可以进行快速转换 Ticks 财产)。

在您的代码中看起来像这样:

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

更新: 这适用于.NET 3.5及更高版本,.NET 4确实支持格式化的时间播音。

TimeSpan 班级有 Hours, MinutesSeconds 单独返回每个时间部分的属性。因此,您可以尝试:

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

获取您想要的格式。

可能有一种最佳的方法,但我还没有找到它。

在查看了几种方法之后,不幸的是,我得到了一个丑陋的答案。您无法真正使用tick,因为它不能正确返回格式,但是以下内容将起作用:

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

嗯,这很讨厌(事实证明) - 至少在.net 4.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") + "."

这是至少在文档中出现的 - 已固定在.NET 4.0中

你可以这样做:

dt.Subtract(TimeSpan.FromMilliseconds(dt.Millisecond)).ToString();

有以下自定义格式指定符y(年),m(月),d(day),h(第12小时),h(小时24),m(minute),s(second),f(第二分),f (第二部分,落后零),t(pm或am)和z(时区)。

以下示例演示了格式指定如何将其重写为输出。 [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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top