TimeSpan 为您提供两个 DateTime 对象之间的持续时间。它可以在几天、几小时或几分钟内始终如一地给出它;月数会根据实际开始和结束日期而有所不同,因为不同的月份有不同的实际天数。
话虽如此,您始终可以编写一个实用程序方法,该方法为您提供YourTimeSpan 对象,该对象根据您的日历和 StartDate / EndDates 为您提供月份数等。
在您的情况下,您可以通过将其单独存储在配置中来使其更简单,例如 - ReportDuration_Years、ReportDuration_Months、ReportDuration_Days。这将允许您在报告中创建有意义的标签,并允许正确识别 StartDate 和 EndDate。
//Call this by passing values from configuration
private string GetNiceLookingLable(int? years, int? months, int? days){
var yearMessage = (years.HasValue)?String.Format("{0} Years", years):String.Empty;
var monthMessage = (months.HasValue)?String.Format("{0} Months", months):String.Empty;
var daysMessage = (days.HasValue)?String.Format("{0} Days", days):String.Empty;
// You probably want to concatenate them properly
return String.Format("{0} {1} {2}",yearMessage, monthMessage, daysMessage);
}
-
//Call this to get starting date
private DateTime getStartingDate(int? years, int? months,int? days){
var retDate = DateTime.Today;
if(years.HasValue){
retDate = retDate.AddYears(-1*years.Value);
}
if(months.HasValue){
retDate = retDate.AddMonths(-1*months.Value);
}
if(days.HasValue){
retDate = retDate.AddDays(-1*days.Value);
}
return retDate;
}