从DateTime.Now获取当前一周的日期列表

5

我的问题可能有些矛盾或琐碎,就是要从今天的日期中创建一个格式为DD-MM-YY的日期列表。假设今天是“11/04/2015”。我想创建一个日期时间列表,从周一的02.11.2015开始,到周日的08.11.2015结束。这怎么可能呢?

我最初的想法是:

DateTime today = new DateTime.Now;

int posDayOfWeek = (int)today.DayOfWeek;

if (posDayOfWeek < 7 && posDayOfWeek > 1)
{
    // And from there a black hole in my brain ....
}

我该如何实现这个?


1
每周一到周日,还是取决于文化? - Jon Skeet
4个回答

15

假设你总是想要从周一到周日,你只需要像这样做:

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();

2

只需使用这个:

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

这很简单,很清晰。我已经为您打出了这段文字。

这不是 OP 所要求的,他们要求从给定日期列出日期列表,而不是枚举。任何人都知道这一点。 - c-sharp-and-swiftui-devni

1
简单方法:
Enumerable.Range(0, 7).Select(x => (DayOfWeek)x).ToList()

0

在网络上搜索类似的内容时,我发现了这个问题/答案的帖子,并展开了一种基于星期几排序的方法,以昨天为开始:

//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)));

非常感谢你!简短而且有效! - Cristian Capannini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接