我目前正在从数据库中获取2个日期,并找出它们之间的差异。我在视图页面中显示总和的值,但它当前显示为小数。例如,产生的值之一是1585.913,但我想用HH:MM:SS格式。
我当前显示小数值的代码如下。
public ActionResult Execution(int id = 0)
{
Execution execution = db.Executions.Find(id);
if (execution == null)
{
return HttpNotFound();
}
ViewBag.ExecutionSeconds = (execution.End - execution.Start).TotalSeconds;
return View(execution);
}
@ViewBag.ExecutionSeconds
我必须对此代码进行哪些更改才能以HH:MM:SS格式显示该值?
提前致谢。
答案 0 :(得分:5)
您可以使用.ToString()
方法格式化TimeSpan
。例如:
(execution.End - execution.Start).ToString(@"dd\.hh\:mm\:ss");
更多信息:
https://msdn.microsoft.com/en-us/library/ee372287(v=vs.110).aspx
答案 1 :(得分:4)
两个日期的子图形返回TimeSpan
类型的结构(execution.End - execution.Start);// returns TimeSpan
(execution.End - execution.Start).ToString(@"hh\:mm\:ss"); // format it
如果您的时间超过24小时(如@juharr指出),您可以使用
string.Format("{0}:{1}:{2}", (int)time.TotalHours, time.Minutes, time.Seconds);
或通过将格式字符串替换为@"dd\.hh\:mm\:ss"
我为TimeSpan添加了一个扩展程序,因为这种格式化经常发生(从here加入):
public static string ToReadableString(this TimeSpan span)
{
string formatted = string.Format("{0}{1}{2}{3}",
span.Duration().Days > 0 ? string.Format("{0:0} day{1}, ", span.Days, span.Days == 1 ? String.Empty : "s") : string.Empty,
span.Duration().Hours > 0 ? string.Format("{0:0} hour{1}, ", span.Hours, span.Hours == 1 ? String.Empty : "s") : string.Empty,
span.Duration().Minutes > 0 ? string.Format("{0:0} minute{1}, ", span.Minutes, span.Minutes == 1 ? String.Empty : "s") : string.Empty,
span.Duration().Seconds > 0 ? string.Format("{0:0} second{1}", span.Seconds, span.Seconds == 1 ? String.Empty : "s") : string.Empty);
if (formatted.EndsWith(", ")) formatted = formatted.Substring(0, formatted.Length - 2);
if (string.IsNullOrEmpty(formatted)) formatted = "0 seconds";
return formatted;
}
答案 2 :(得分:2)
您需要格式化TimeSpan
格式,以execution.End - execution.Start
格式返回@"hh\:mm\:ss"
表达式;
TimeSpan ts = execution.End - execution.Start;
string seconds = ts.ToString(@"hh\:mm\:ss"); // 00:26:25
顺便说一句,custom TimeSpan
formatting中没有MM
说明符,它应该小写为mm
specifier。