获得两个日期之间的年,月和周C#

时间:2016-05-19 04:58:51

标签: c#

我需要任何帮助才能获得2个日期之间的年,月和周数 示例From_DateEnd_Date

3 个答案:

答案 0 :(得分:1)

C#没有直接执行此操作的库,因此您必须使用TimeSpan类进行自己的计算。

最简单的方法是添加对Microsoft.VisualBasic.dll的引用。然后添加using语句来添加命名空间。

using Microsoft.VisualBasic;

调用DateAndTime类的静态DateDiff函数。

只需指定要返回的日期间隔

var years = DateAndTime.DateDiff(DateInterval.Year, From_Date, End_Date);
var months = DateAndTime.DateDiff(DateInterval.Month, From_Date, End_Date);
var weeks = DateAndTime.DateDiff(DateInterval.Weekday, From_Date, End_Date);

答案 1 :(得分:1)

您可以将差异细分为年,月,周...指定您自己的规则。这是一个简单的例子:

public Tuple<int, int, int, int> BreakDownDateRange(DateTime fromDate, DateTime toDate)
{
    int years = 0;
    int months = 0;
    int weeks = 0;
    int days = 0;
    DateTime remainingDate = fromDate;
    while (remainingDate.Date < toDate.Date)
    {
        var yearTest = remainingDate.Date.AddYears(1);
        if(yearTest <= toDate.Date)
        {
            years += 1;
            remainingDate = yearTest;
            continue;
        }

        var monthsTest = remainingDate.Date.AddMonths(1);
        if(monthsTest <= toDate.Date)
        {
            months += 1;
            remainingDate = monthsTest;
            continue;
        }

        var weeksTest = remainingDate.Date.AddDays(7);
        if(weeksTest <= toDate.Date)
        {
            weeks += 1;
            remainingDate = weeksTest;
            continue;
        }

        var daysTest = remainingDate.Date.AddDays(1);
        if(daysTest <= toDate.Date)
        {
            days += 1;
            remainingDate = daysTest;
            continue;
        }
    }

    return Tuple.Create(years, months, weeks, days);
}

毫无疑问,这可以优化,但我可以留给你。

(如果年份测试失败一次,它将始终失败,因此您可以为此添加一个布尔值,以此类推其他内容)

答案 2 :(得分:0)

这是一个棘手的问题。什么是一年?什么是一个月?你会计算29天为1个月,还是0?同样,你会计算一年340天,还是零年?这基本上是他们在TimeSpan课程中缺失的原因。

您可以轻松制作自己的扩展方法,为此添加逻辑,例如:

public static int FullYears(this TimeSpan timeSpan)
{
    return (int) Math.Ceiling(timeSpan/365);
}

但构造很大程度上取决于你自己对年,月和周构成的定义:)