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

Posted

技术标签:

【中文标题】如何使用 C# 获取两个 DateTime 对象之间的时差?【英文标题】:How do I get the time difference between two DateTime objects using C#? 【发布时间】:2011-02-18 17:55:12 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您需要使用 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));

【讨论】:

【参考方案2】:

你想要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);

【讨论】:

【参考方案3】:

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

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

【讨论】:

或者只是TimeSpan sincelast = DateTime.Now - LastUpdate;【参考方案4】:

以下示例演示了如何执行此操作:

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 Object,它提供了其他有用的属性。

【讨论】:

要显示差异,请执行以下操作:Console.WriteLine((a - b).ToString(@"hh\:mm\:ss"))。见:MSDN Custom TimeSpan Format 这对我有用。我只是想知道客户端进行 REST 调用并得到回复需要多少秒。 注意使用TotalMinutes! (不是Minutes Visual Studio 2019 中不存在减法【参考方案5】:

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

这是一个例子:

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

【讨论】:

【参考方案6】:

如果它们都是 UTC 日期时间值,您可以这样做 TimeSpan diff = dateTime1 - dateTime2;

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

【讨论】:

【参考方案7】:
private void button1_Click(object sender, EventArgs e)

    TimeSpan timespan;
    timespan = dateTimePicker2.Value - dateTimePicker1.Value;
    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());

【讨论】:

【参考方案8】:

您可以使用以下方式来实现两个日期时间对象之间的差异。假设有 DateTime 对象 dt1 和 dt2 然后代码。

TimeSpan diff = dt2.Subtract(dt1);

【讨论】:

【参考方案9】:
 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);

【讨论】:

以上是关于如何使用 C# 获取两个 DateTime 对象之间的时差?的主要内容,如果未能解决你的问题,请参考以下文章

如何准确获取“年”中两个 DateTime 对象之间的差异 [已关闭,使用 NodaTime] [重复]

C# Stopwatch获取循环中某操作的时间消耗

c#如何计算两个日期之间相隔天数

如何比较 PHP 5.2.8 中的两个 DateTime 对象?

C#中的时间类

如何在 C# 中克隆 DateTime 对象?