在c#中将十进制值转换为时间格式

时间:2015-08-06 13:15:43

标签: c#

我目前正在从数据库中获取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格式显示该值?

提前致谢。

3 个答案:

答案 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

Timespan formatting

如果您的时间超过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