使用c#从时间跨度中删除秒

本文关键字:删除 时间跨度 使用 | 更新日期: 2023-09-27 18:20:56

我想使用c#从时间跨度中删除秒

我的代码在这里:

TimeSpan lateaftertime = new TimeSpan();
lateaftertime =  lateafter - Convert.ToDateTime(intime) ;

返回值00:10:00

但我想要下面的输出:00:10只是不是秒字段:00

使用c#从时间跨度中删除秒

好吧,你可以简单地做

string.Format("{0}:{1}", ts.Hours,ts.Minutes) // it would display 2:5

编辑

要使其正确格式化,请使用

string.Format("{0:00}:{1:00}", ts.Hours,ts.Minutes) // it should display 02:05

请注意,TimeSpan没有格式。它存储在一些内部表示中,与00:10:00完全不同。

通常的格式hh:mm:ss只有在TimeSpan被显式或隐式转换为String时才会产生。因此,转换是您需要做一些事情的地方。你的问题中的代码示例是";太早了"——此时TimeSpan仍然是TimeSpan类型。

要修改到字符串的转换,您可以使用String.Format,如V4Vendetta的答案中所建议的,也可以使用TimeSpan.ToString(可与.NET 4一起使用)的自定义格式字符串:

string formattedTimespan = ts.ToString("hh'':mm");

请注意,这种格式字符串有以下缺点:

  • 如果TimeSpan的跨度超过24小时,它将只显示不属于一整天的时间间隔中的整小时数。

    示例:new TimeSpan(26, 0, 0).ToString("hh'':mm")生成02:00。这可以通过添加d自定义格式说明符来修复。

  • 自定义TimeSpan格式说明符不支持包含符号,因此无法区分负时间间隔和正时间间隔。

    示例:new TimeSpan(-2, 0, 0).ToString("hh'':mm")生成02:00


cco TimeSpan只是一个围绕64位整数的薄包装器,该整数包含tick的数量(10000 tick=1毫秒)。因此,00:10:00将被存储为编号6,000,000,000

TimeSpan newTimeSpan = new TimeSpan(timeSpan.Hours, timeSpan.Minutes, 0);

由于时间跨度字符串表示可能超过小时和分钟,因此删除秒而不删除其他内容的最可靠代码应该是这样的:

var text = TimeSpan.FromDays(100).ToString(); // "100.00:00:00"
var index = text.LastIndexOf(':');
text = text.Substring(0, index); // "100.00:00"