当给出开始日期时,需要对其进行各种计算以产生3个其他日期。
基本上我需要根据当前日期确定用户根据不同频率收费的日期。
双年度(每年收费两次), 每季度(每年收费4次), 和两个月(其他月份开帐单)。
截止日期为26/04/2008
- BiAnnually:此日期最后一次收费标准为26/10/2010,并且日期为26/04/2011。
- 季度:此日期最后一次收费将于2011年1月26日结算,并应至今日为26/04/2011
- 两个月:此日期将在2010年12月26日之前结算,并且应该提供日期为26/02/2011。
非常感谢协助。
答案 0 :(得分:3)
我认为你可以这样做:
public void FindNextDate(DateTime startDate, int interval);
DateTime today = DateTime.Today;
do {
startDate = startDate.AddMonths(interval);
} while (startDate <= today);
return startDate;
}
用法:
DateTime startDate = new DateTime(2008, m4, 26);
DateTime bi = FindNextDate(startDate, 6);
DateTime quarterly = FindNextDate(startDate, 3);
DateTime two = FindNextDate(startDate, 2);
答案 1 :(得分:0)
我认为你想要的就像是
DateTime x = YourDateBasis;
y = x.AddMonths(6);
y = x.AddMonths(3);
y = x.AddMonths(2);
然后从评论中进行编辑,
日期数学每个人的帐户的周期周期,您只需要开始和结束日期,并继续添加相应的月份,直到您创建所有预期的月份。几乎与每月应付3年的贷款一样
DateTime CurrentDate = DateTime.Now;
while( CurrentDate < YourFinalDateInFuture )
{
CurrentDate = CurrentDate.AddMonths( CycleFrequency );
Add Record into your table as needed
Perform other calcs as needed
}
答案 2 :(得分:0)
enum BillPeriod
{
TwoMonth = 2,
Quarterly = 3,
SemiAnnually = 6,
BiAnnually = 24
}
public Pair<Datetime, Datetime> BillDates(Datetime currentBillDate, BillPeriod period)
{
Datetime LastBill = currentBillDate.AddMonths(-1 * (int)period);
Datetime NextBill = currentBillDate.AddMonths((int)period);
return new Pair<Datetime,Datetime>(LastBill, NextBill);
}
答案 3 :(得分:0)
这是一个糟糕的解决方案,但它确实有效。请记住,红灯,绿灯,重构。在这里,我们处于绿灯状态:
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
Console.WriteLine(GetLastBilled(new DateTime(2008, 4, 26), 6));
Console.WriteLine(GetNextBilled(new DateTime(2008, 4, 26), 6));
Console.WriteLine(GetLastBilled(new DateTime(2008, 4, 26), 4));
Console.WriteLine(GetNextBilled(new DateTime(2008, 4, 26), 4));
Console.WriteLine(GetLastBilled(new DateTime(2008, 4, 26), 2));
Console.WriteLine(GetNextBilled(new DateTime(2008, 4, 26), 2));
Console.WriteLine("Complete...");
Console.ReadKey(true);
}
static DateTime GetLastBilled(DateTime initialDate, int billingInterval) {
// strip time and handle staggered month-end and 2/29
var result = initialDate.Date.AddYears(DateTime.Now.Year - initialDate.Year);
while (result > DateTime.Now.Date) {
result = result.AddMonths(billingInterval * -1);
}
return result;
}
static DateTime GetNextBilled(DateTime initialDate, int billingInterval) {
// strip time and handle staggered month-end and 2/29
var result = initialDate.Date.AddYears(DateTime.Now.Year - initialDate.Year);
while (result > DateTime.Now.Date) {
result = result.AddMonths(billingInterval * -1);
}
result = result.AddMonths(billingInterval);
return result;
}
}
}
这真的很棘手。例如,您需要考虑到您的帐单日期可能是闰年的2/29,而不是所有月份都有相同的天数。这就是我做initialDate.Date.AddYears(DateTime.Now.Year - initialDate.Year);
电话的原因。