如何计算开始和结束时的年和月的差异

时间:2011-07-14 18:22:29

标签: c#

  

可能重复:
  Calculate Years, Months, weeks and Days

如何计算开始日期和结束日期的年份和月份差异?

您好

在c#2.0项目上工作,我需要计算开始和结束日期的年和月差异

我在考虑像

这样的功能
        public void CalculateYearsAndMonths(DateTime startDate,
                                            DateTime endDate,
                                            out int years,
                                            out int months)
        {
            int years=0;
            int months=0;

            //????
        }

有什么建议吗?

5 个答案:

答案 0 :(得分:2)

即使两个日期之间的天数为365天,此代码也能正常运行。例如。 1972年2月29日和1973年2月28日,它将返回0年零11个月。

if (endDate < startDate)
{
    DateTime temp = endDate;
    endDate = startDate;
    startDate = temp;
}

years = endDate.Year - startDate.Year;
months = endDate.Month - startDate.Month;
int days = endDate.Day - startDate.Day;
if (days < 0) months--;
if (months < 0)
{
    months += 12;
    years--;
}

顺便说一句,您需要删除这两行以使out参数正常工作:

int years=0;
int months=0;

答案 1 :(得分:1)

我认为月份的数量是模糊的,因为每个月都有不同的天数。但是,如果基于DateTime.MinValue,您可以使用:

        TimeSpan difference = endDate - startDate;

        DateTime age = DateTime.MinValue + difference;

        // Min value is 01/01/0001

        int ageInYears = age.Year - 1;
        int ageInMonths = age.Month - 1;
        int ageInDays = age.Day - 1;

        Console.WriteLine("{0}, {1}, {2}", ageInYears, ageInMonths, ageInDays); 

答案 2 :(得分:0)

int years = endDate.Year - startDate.Year;
int months = endDate.Month - startDate.Month;

你可以尝试以上,应该工作。

答案 3 :(得分:0)

这取决于您想要计算数月和数年的方式。您是否关心交叉边界(例如1月25日至2月1日=一个月或12月30日至1月1日= 1年)或关于平均大小月/年(例如,每月29天或一年365天)的数量日期吗

您可以通过减去日期获得的TimeSpan结果将为您提供所有固定大小的时间段(例如,天,分钟)

请参阅此question,了解有关为何数月和数年可能很难的详细信息。

答案 4 :(得分:0)

这样的东西?

        var end = endDate.Year + endDate.Month / 12.0;
        var start = startDate.Year + startDate.Month / 12.0;

        var years = (int)(end - start);
        var months = (end - start) * 12;

不确定你是否想要整个月......

希望这有帮助,

约翰