繁体   English   中英

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

[英]Get list of dates for first week of current month in 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)) 
                    .ToList(); 
}

但问题是我得到了当月的所有日期。

我想要实现的目标如下:

Day: SUN, MON, TUE, WED, THU, FRI, SAT
Date 1, 2, 3, 5, 6.. 

如何在 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);
            }

我设法得到了本周的。 但我怎样才能得到这一天呢?

output 是:

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

我希望我的输出是:

周一 - 04.05.2020 周二 - 05.05.2020

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

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

由于您已声明第一周实际上应该从星期一开始,您可以使用Enumerable.SkipWhile修改查询以跳过几天,直到找到第一个正确日期。

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

关于您的评论:

使用ddd格式化程序,您可以获得日期的短名称。 string shortName = DateTime.Now.ToString("ddd");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM