C#获取两个DateTime日期之间的差异

时间:2014-05-16 18:23:40

标签: c# visual-studio-2010 date datetime

所以我正在研究这个具有日期功能的小应用程序(显示日,月,年等的差异) 现在做“选定的日期是14151天,465个月和39年前”这样的事情很容易,但我怎么能以可读的格式(“15天,7个月和39年前”)说出来? / p>

现在要做到这一点,我已经设定了多年的差异,如

int years = selectedDate.Year - currentDate.Year
几个月和几天相同。然而,这几乎没有用,特别是当前进一个月时(因为它可能会说15天和1个月因为date1.Day - date2.Day = 15,而实际上可能是8天。我认为这是因为日期的工作方式与几个月的东西,但我不确定。

无论如何,我希望我有任何意义,因为我甚至无法真正跟踪自己。 任何想法都非常感谢。 :d

6 个答案:

答案 0 :(得分:5)

从另一个中减去一个DateTime会返回一个TimeSpan,您可以使用该TimeSpan result = selectedDate - currentDate; result.Days... result.Hours... etc. 来确定两个日期之间的时间段,表示为天,小时,分钟,秒等的时间测量值。

DateTime

花费数月和数年是比较棘手的,因为一个月中的日子每年都不同等等。您必须手动进行数学运算,可能是原始的{{1}}个对象。

答案 1 :(得分:2)

短时间内你可以这样做:

        TimeSpan timeDiff = selectedDate - currentDate;
        string readableDiff = string.Format(
            "{0:D2} hrs, {1:D2} mins, {2:D2} secs",
            timeDiff.Hours, timeDiff.Minutes, timeDiff.Seconds);

但是我注意到你正在处理涉及数年和数月的更长时期。对于这样的计算,您需要比TimeSpan更强大的功能。您可以查看Jon Skeet的.NET平台的Noda Time端口: https://code.google.com/p/noda-time/

使用Noda Time,你可以这样做:

        var period = Period.Between(selectedDate, currentDate,
            PeriodUnits.Years | PeriodUnits.Months | PeriodUnits.Days);
        string readableDifference = string.Format(
            "{0} years, {1} months and {2} days",
            period.Years, period.Months, period.Days);

答案 2 :(得分:0)

您可以使用DateTime课程进行数学运算。结果是TimeSpan的行为类似于DateTime,只表示一段时间而不是绝对日期。

DateTime selectedDate;
DateTime currentDate;

TimeSpan difference = selectedDate.Subtract(currentDate);

string result = difference.ToString("whatever format you like");

答案 3 :(得分:0)

使用TimeSpanMath.Abs来说明负值:

DateTime date1 = new DateTime(2012, 5, 15);
DateTime date2 = new DateTime(2014, 5, 16);

TimeSpan dateDiff = date1 - date2;

int years = Math.Abs((int)dateDiff.TotalDays) / 365;

答案 4 :(得分:0)

我这样做是为了获得两个月之间的差异:

var start = startDate.Value;
var end = endDate.Value;

var duration = ((end.Year - start.Year) * 12) + end.Month - start.Month;

当然,我得到的唯一原因.Value是因为它们是可以约会的日期,但我想你可以在你的情况下使用类似的东西。

答案 5 :(得分:0)

如果您获取两个DateTime对象之间的差异,则会得到一个TimeSpan对象。

DateTime a = DateTime.Now;
DateTime b = DateTime.Now.AddYears(-1);
TimeSpan c = a - b;
Console.WriteLine( c );

会得到364.23:59:59.9951930的答案。您可以为格式化的响应重载toString(),或者根据需要获得c.TotalMilliseconds并除以/ modulos以获得多少年/月/等...