如何使用C#获取两个DateTime对象之间的时差?


159

如何DateTime使用C#获得两个对象之间的时差?

Answers:


227

下面的示例演示如何执行此操作:

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

执行时,由于日期/时间之间存在30分钟的差异,因此将打印“ 30”。

结果DateTime.Subtract(DateTime x)是一个TimeSpan对象,它提供了其他有用的属性。


5
要显示差异,请执行以下操作:Console.WriteLine((a - b).ToString(@"hh\:mm\:ss"))。请参阅:MSDN自定义TimeSpan格式
ishmael 2012年

这对我有用。我只想知道客户端进行REST调用并获得回复所需的时间。
Ziggler

1
注意使用TotalMinutes!(不是Minutes
Shahar Shokrani

63

您需要TimeSpan结构:

TimeSpan diff = dateTime1 - dateTime2;

TimeSpan对象表示一个时间间隔(时间或经过的时间),以天,小时,分钟,秒和几分之一秒的正数或负数表示。TimeSpan结构也可用于表示一天中的时间,但前提是该时间与特定日期无关。

有多种方法可以从该结构中获取天,小时,分钟,秒和毫秒。

如果您只是对差异感兴趣,那么:

TimeSpan diff = Math.Abs(dateTime1 - dateTime2);

不论顺序如何,都会给您时间之间的正差。

如果您刚刚有了时间部分,但时间可以在午夜之前进行划分,那么您需要在跨度上增加24小时才能获得实际的时差:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}

您好,如果datetime2为09:00且dateTime1为18:00,则diff为09Hours 00分钟。那么datetime2的等式是21:00,dateTime1是03:00,则差是负数和错误。怎么解决呢?
Pranesh Janarthanan

@Pranesh-如果对象包含日期,则应该没有问题。如果它们不包含时间,则可以采用绝对差异,也可以在时间跨度中增加24小时以得出正差异。哪个正确取决于您的应用程序。
克里斯·

是的,我已经删除了这些评论!您能给我看一个代码示例来解释吗?
Pranesh Janarthanan

30

您需要使用DateTime类的Subtract方法,该方法返回TimeSpan

var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));

10

我通常的做法是减去两个DateTime,这使我得到一个TimeSpan,它将告诉我差异。

这是一个例子:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;

4

如果它们都是UTC日期时间值,则可以执行 TimeSpan diff = dateTime1 - dateTime2;

否则,在每种可能的情况下获得正确答案的机会都是零。


3
 var startDate = new DateTime(2007, 3, 24);

 var endDate = new DateTime(2009, 6, 26);

 var dateDiff = endDate.Subtract(startDate);

 var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365, 
 (int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);

 Console.WriteLine(date);

2

您需要使用TimeSpan。这是一些示例代码:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);

2
或者只是TimeSpan sincelast = DateTime.Now - LastUpdate;
Ben M

2
private void button1_Click(object sender, EventArgs e)
{
    TimeSpan timespan;
    timespan = dateTimePicker2.Value - dateTimePicker1.Value;
    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());
}

2

您可以按以下方式使用以实现两个Datetime对象之间的差异。假设有DateTime对象dt1和dt2,然后是代码。

TimeSpan diff = dt2.Subtract(dt1);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.