将TimeSpan格式化为小时、分钟和秒

5

我正在尝试解决一个问题,我正在使用 TimeSpan 来计算两个 DateTime 对象之间的时间差,以获得窗口打开的总时间。虽然它能正常工作,但我只需要显示小时、分钟和秒,而不需要毫秒。下面是我正在使用的代码,其中 _timeStart 在方法外初始化,但它只是获取窗口打开的时间。

_timeStop = DateTime.Now;
TimeSpan timeSpent = _timeStop.Subtract(_timeStart);
string.Format($"{timeSpent:hh\\:mm\\:ss}");
_logger.Debug(timeSpent);
3个回答

6

若要显示小时/分钟/秒,请使用此格式字符串:

var timeSpent = new TimeSpan(1, 12, 23, 62);
Console.WriteLine(timeSpent.ToString(@"hh\:mm\:ss"));

您可以在这里找到更多相关的信息。


3
var str = string.Format("{0:00}:{1:00}:{2:00}", timeSpent.Hours, timeSpent.Minutes, timeSpent.Seconds);
_logger.Debug(str);

应该能解决问题。

如果使用负时间跨度(例如-01:12:23),则格式化为“-01:-12:-23”。 - Mort

1
你可以使用这个方法:
public static string ConvertTimeSpanToString(TimeSpan ts)
{
  return $"{ts.Days}:{ts.Hours}:{ts.Minutes}:{ts.Seconds}:{ts.Milliseconds}";
}

或者更好的:

public static string ConvertTimeSpanToString(TimeSpan ts)
    {

      var days = $"{ts.Days} day{Plural(ts.Days)}";

      var hours = $"{ts.Hours} hour{Plural(ts.Hours)}";

      var minutes = $"{ts.Minutes} minute{Plural(ts.Minutes)}";

      var seconds = $"{ts.Seconds} second{Plural(ts.Seconds)}";

      var milliSeconds = $"{ts.Milliseconds} milliseconde{Plural(ts.Milliseconds)}";

      return $"{days} {hours}:{minutes}:{seconds}:{milliSeconds}";
    }

    private static string Plural(int number)
    {
      return number > 1 ? "s" : string.Empty;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接