0

我有一个样品日期

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 = "";
}

但我无法让它工作:(。

注意:减去日期和时间我没有任何问题。我问的是格式。

已关闭:仅使用从 IFormatProvider 继承的包装类。

4

4 回答 4

3

使用 TimeSpan 类:

TimeSpan ts = endDate - startDate;

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

于 2012-06-07T08:04:26.697 回答
1

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

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

另请查看此自定义格式提供程序

于 2012-06-07T08:36:40.103 回答
0
TimeSpan tp = endDate.Subtract(startDate);
string myString = tp.ToString("c");

myString应该包含经过的时间。检查thisthis以了解其他时间跨度格式。

于 2012-06-07T08:04:45.117 回答
0

这对你有用吗?

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() 的包装类,该类执行正确的操作,并将其传入。

于 2012-06-07T08:09:30.153 回答