C# 在C中获取当月第一周的日期列表#

C# 在C中获取当月第一周的日期列表#,c#,C#,我有下面的代码,我正在处理当前月份第一周的日期列表 public static List<DateTime> GetDates(int year, int month) { return Enumerable.Range(1, DateTime.DaysInMonth(year, month)) .Select(day => new DateTime(year, month, day))

我有下面的代码,我正在处理当前月份第一周的日期列表

 public static List<DateTime> GetDates(int year, int month)
{
   return Enumerable.Range(1, DateTime.DaysInMonth(year, month))  
                    .Select(day => new DateTime(year, month, day)) 
                    .ToList(); 
}
如何在C#中实现这一点

使用此选项:

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, 6).Select(days => monday.AddDays(days)).ToList();


            foreach (var date in dates) {
            Console.WriteLine(date);
            }
我设法拿到了本周的工资。但是我怎样才能得到这一天呢

输出为:

04.05.2020 00:00:00
05.05.2020 00:00:00
06.05.2020 00:00:00
07.05.2020 00:00:00
08.05.2020 00:00:00
09.05.2020 00:00:00
我希望我的输出是:

星期一至2020年5月4日 2020年5月5日星期二

您可以使用获取返回列表的第一周(对应于前7项)

Enumerable.Range(1, DateTime.DaysInMonth(2020, 5))
                    .Select(day => new DateTime(2020, 5, day))
                    .Take(7)
                    .ToList();
因为您已经声明第一周实际上应该从星期一开始,所以可以使用修改查询以跳过这些天,直到找到第一个正确的日期

Enumerable.Range(1, DateTime.DaysInMonth(2020, 5))
                    .Select(day => new DateTime(2020, 5, day))
                    .SkipWhile(z => z.DayOfWeek != DayOfWeek.Monday)
                    .Take(7)
                    .ToList();

关于你的评论:

使用可以获得日期的简短名称。
string shortName=DateTime.Now.ToString(“ddd”)

您可以使用
。取(7)
获得前7天。这有帮助吗?定义“第一周”:您正在编程的区域设置中的几周是从第一周开始,还是从周一、周日、周六开始?你的意思是“第一个完整的星期”,还是你会删掉它?你对第一个星期的定义是什么?前7天,或者第一整周(根据某个国家对一周开始时间的具体定义),那么我的声明打印了什么?请养成解释你得到了什么和你想要什么的习惯,而不仅仅是“不,不是那个”。这类似于“我不会告诉你我想要什么,但当我看到它时我会告诉你,所以请开始把你知道的所有东西都组合起来,这样我就可以看到它们,找到我想要的”。我猜您想要的是
Console.WriteLine($“{date.DayOfWeek.ToString().Substring(0,3.ToUpper()}-{date:dd.MM.yyyy}”)
.ToString(“ddd”)
将生成一周中的一天,但它可能是小写的,并以点结尾。这是一个很好的解决方法。我怎样才能得到这一天呢?如周一、周二、周三等,您可以从
CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek
Enumerable.Range(1, DateTime.DaysInMonth(2020, 5))
                    .Select(day => new DateTime(2020, 5, day))
                    .SkipWhile(z => z.DayOfWeek != DayOfWeek.Monday)
                    .Take(7)
                    .ToList();