从DateTime.Now获取当前星期的天数列表

本文关键字:数列 列表 DateTime Now 获取 | 更新日期: 2023-09-27 18:20:35

我矛盾或琐碎的问题是为我创建一个从今天开始的日期列表,格式为DD-MM-YY。假设我们今天是";2015年4月11日";。我想创建一个日期时间列表,该列表正好从2015年11月2日星期一开始到2015年12月8日星期日。这怎么可能?

我最初想:

DateTime today = new DateTime.Now;
int posDayOfWeek = (int)today.DayOfWeek;
if (posDayOfWeek < 7 && posDayOfWeek > 1)
{
    // And from there a black hole in my brain ....
}

我怎样才能做到这一点?

从DateTime.Now获取当前星期的天数列表

假设你总是想要周一到周日,你只需要这样的东西:

DateTime today = DateTime.Today;
int currentDayOfWeek = (int) today.DayOfWeek;
DateTime sunday = today.AddDays(-currentDayOfWeek);
DateTime monday = sunday.AddDays(1);
// If we started on Sunday, we should actually have gone *back*
// 6 days instead of forward 1...
if (currentDayOfWeek == 0)
{
    monday = monday.AddDays(-7);
}
var dates = Enumerable.Range(0, 7).Select(days => monday.AddDays(days)).ToList();

只需使用此:

DayOfWeek[] days = { 
    DayOfWeek.Sunday, 
    DayOfWeek.Monday, 
    DayOfWeek.Tuesday, 
    DayOfWeek.Wednesday, 
    DayOfWeek.Thursday, 
    DayOfWeek.Friday, 
    DayOfWeek.Saturday };

这很简单。很清楚。我已经帮你打好了。

在网上搜索类似的东西,我找到了这个问答线程,并扩展为从昨天开始根据一周中的某一天创建排序顺序:

//create a sort order that starts yesterday
DateTime orderStartDate = DateTime.Today.AddDays(-1);
List<int> sortOrder = Enumerable.Range(0,7).Select(days => (int)orderStartDate.AddDays(days).DayOfWeek).ToList();
//sort collection using the index of the sortOrder
collection.AddRange(list.OrderBy(list  => sortOrder.FindIndex(days => day == list.TargetDay)));

简单方法:

Enumerable.Range(0, 7).Select(x => (DayOfWeek)x).ToList()