C#整小时格式

C#整小时格式,c#,datetime,formatting,C#,Datetime,Formatting,我有一个样本日期 DateTime startDate = DateTime.Parse("2011-01-01 00:00:00"); DateTime endDate = DateTime.Parse("2011-01-03 01:01:03"); 我怎样才能让它达到49:01:03的运行时间?我无法获取任何字符串格式,包括天 目前我想在DataGridView的列上使用它 下面是它的示例代码: private void dataGridView1_ColumnAdded(object s

我有一个样本日期

DateTime startDate = DateTime.Parse("2011-01-01 00:00:00");
DateTime endDate = DateTime.Parse("2011-01-03 01:01:03");
我怎样才能让它达到49:01:03的运行时间?我无法获取任何字符串格式,包括天

目前我想在DataGridView的列上使用它

下面是它的示例代码:

private void dataGridView1_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
{
    e.Column.CellTemplate.Style.FormatProvider = new DayToHour();
    //e.Column.CellTemplate.Style.Format = "";
}
但是我不能让它工作

注意:我在减去日期和时间方面没有任何问题。我只是问一下格式

Closed:刚刚使用了从IFormatProvider继承的包装类


使用TimeSpan类:

TimeSpan ts = endDate - startDate;

然后,您在TimeSpan类中获得了所需的所有信息。我假设格式不是问题。

使用TimeSpan类:

TimeSpan ts = endDate - startDate;
TimeSpan tp = endDate.Subtract(startDate);
string myString = tp.ToString("c");
然后你在TimeSpan类中得到了你需要的所有信息。我想格式化不是问题

TimeSpan tp = endDate.Subtract(startDate);
string myString = tp.ToString("c");
myString
应包含经过的时间。请检查和以了解其他时间跨度格式


myString
应该包含经过的时间。请检查和以获取其他时间跨度格式。

这对您有用吗

using System;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime startDate = DateTime.Parse("2011-01-01 00:00:00");
            DateTime endDate = DateTime.Parse("2011-01-03 01:01:03");

            TimeSpan elapsed = endDate - startDate;

            string result = string.Format("{0:d2}:{1:d2}:{2:d2}", elapsed.Days*24 + elapsed.Hours, elapsed.Minutes, elapsed.Seconds);

            Console.WriteLine(result);
        }
    }
}

我不太确定您将如何在控件中显示它。您可能需要编写一个包装器类,该类实现一个执行正确操作的ToString(),并将其传入。

这对您有用吗

using System;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime startDate = DateTime.Parse("2011-01-01 00:00:00");
            DateTime endDate = DateTime.Parse("2011-01-03 01:01:03");

            TimeSpan elapsed = endDate - startDate;

            string result = string.Format("{0:d2}:{1:d2}:{2:d2}", elapsed.Days*24 + elapsed.Hours, elapsed.Minutes, elapsed.Seconds);

            Console.WriteLine(result);
        }
    }
}

我不太确定如何将其显示在控件中。您可能需要编写一个包装器类,该类实现一个正确的ToString(),并将其传入。

我认为可能没有此类格式可用,因此您必须在这些行中获取值

TimeSpan diff = endDate - startDate;
String.Format("{0:00}hr {1:00}mn {2:00}sec",
                     Math.Truncate(diff.TotalHours),diff.Minutes,diff.Seconds);

还可以看看这个

我想可能没有这样的格式,所以您必须在这些行中获取值

TimeSpan diff = endDate - startDate;
String.Format("{0:00}hr {1:00}mn {2:00}sec",
                     Math.Truncate(diff.TotalHours),diff.Minutes,diff.Seconds);

下一次发布代码时,也可以查看一下这个

,选择代码并按{}代码示例图标,或者按
Ctrl+K
将其格式化:)下一次发布代码时,选择代码并按{}对示例图标进行编码,或者按Ctrl+K对其进行良好的格式设置:)如果他想要总小时数而不是天、小时数等,则没有内置的TimeSpan格式字符串。嗯,他写了我无法获得任何字符串格式,包括天。,可能我理解错了他指定了他想要的输出:“我怎样才能使它达到49:01:03的运行时间?”-注意,它一开始的总小时数没有任何日期信息。不知道为什么他接着说“包括天”。我认为这是一个糟糕的规范。;@MatthewWatson为什么你认为这是一个糟糕的规范?因为示例格式是“49:01:03”“显示的是总小时数,而不是天数,但您的文本说明中显示的是“包括天数”,这与示例格式相矛盾。我想你的意思是“包括总小时”而不是“包括天”。如果他想要总小时而不是天、小时等,则没有内置的TimeSpan格式字符串。嗯,他写了
我无法获得包括天在内的任何字符串格式。
,可能我理解错了他指定了他想要的输出:“我怎样才能使它达到49:01:03的运行时间?”-注意,它一开始的总小时数没有任何日期信息。不知道为什么他接着说“包括天”。我认为这是一个糟糕的规范。;@MatthewWatson为什么你认为这是一个糟糕的规范?因为示例格式是“49:01:03”“显示的是总小时数,而不是天数,但您的文本说明中显示的是“包括天数”,这与示例格式相矛盾。我想你的意思是“包括总小时”而不是“包括天”。