我需要任何帮助才能获得2个日期之间的年,月和周数
示例From_Date
和End_Date
答案 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);
}
但构造很大程度上取决于你自己对年,月和周构成的定义:)