如何计算开始日期和结束日期的年份和月份差异?
您好
在c#2.0项目上工作,我需要计算开始和结束日期的年和月差异
我在考虑像
这样的功能 public void CalculateYearsAndMonths(DateTime startDate,
DateTime endDate,
out int years,
out int months)
{
int years=0;
int months=0;
//????
}
有什么建议吗?
答案 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;
不确定你是否想要整个月......
希望这有帮助,
约翰