我的开始日期是:2019年1月1日,结束日期是2019年12月31日。
我需要获取这些日期之间的所有可能时间段,但要间隔一定时间。
时间间隔可以是180、90、45、15、7和1天。
因此,如果我选择180天,则退货应为包含以下期间的列表:
2019年1月1日-2019年6月30日(生成列表的第一期)
2019年1月7日-2019年12月31日(第二个生成列表)
这几乎像Generate list of list for start and end date of week from date range 但是我需要在C#中做到这一点
How to find a list of Dates from a Start-Date and End-Date 不是我所需要的。但是很近。
DateTime startDate = DateTime.Parse("01/01/2019");
DateTime endDate = DateTime.Parse("31/12/2019");
dayInterval = 45;
startDate = startDate.AddDays(dayInterval);
endDate = endDate.AddDays(-dayInterval);
我也尝试过:
var startDate = new DateTime(2019, 1, 1);
var endDate = new DateTime(2019, 12, 31);
int days = 45;
List<DateTime> range = Enumerable.Range(0, days)
.Select(i => startDate.AddDays(i))
.ToList();
答案 0 :(得分:0)
也许尝试这样编写代码:
tatic IEnumerable<DateTime> GetAllDatesAndInitializeTickets(DateTime startDate, DateTime endDate)
{
List<DateTime> allDates = new List<DateTime>();
for (DateTime i = startDate; i <= endDate; i = i.AddDays(45))
{
allDates.Add(i);
}
return allDates.AsReadOnly();
}
答案 1 :(得分:0)
这里提出的解决方案是我需要的Split date range into date range chunks
public static IEnumerable<Tuple<DateTime, DateTime>> SplitDateRange(DateTime start, DateTime end, int dayChunkSize)
{
DateTime chunkEnd;
while ((chunkEnd = start.AddDays(dayChunkSize)) < end)
{
yield return Tuple.Create(start, chunkEnd);
start = chunkEnd;
}
yield return Tuple.Create(start, end);
}
答案 2 :(得分:0)
对于日期时间的保留期,您可以创建Period结构:
public struct Period
{
public DateTime PeriodStartDate { get; set; }
public DateTime PeriodEndDate { get; set; }
public Period(DateTime periodStartDate, DateTime periodEndDate)
{
this.PeriodStartDate = periodStartDate;
this.PeriodEndDate = periodEndDate;
}
}
您可以计算出给定间隔内有多少个期间,并根据该期间添加天数。这是基本算法:
DateTime startDate = DateTime.Parse("01/01/2019");
DateTime endDate = DateTime.Parse("31/12/2019");
int dayInterval = 90;
var dateDiff = (endDate - startDate).TotalDays;
int dateRatio = (int)dateDiff / dayInterval;
var listDates = new List<Period>();
var lastDate = startDate;
for (int i = 0; i < dateRatio; i++)
{
var offsetDay = lastDate.AddDays(dayInterval);
listDates.Add(new Period(lastDate, offsetDay));
lastDate = offsetDay.AddDays(1);
}
您还可以在dateInterval
变量上添加一些验证,该变量只能是180、90、45、15、7和1。最后,可以缩短算法,但是我为清楚的答案分别创建了变量。