如何在C#中的日期范围内获取所有周末

Dev*_*per 2 .net c# date-range dayofweek weekend

我只是想知道是否有一个简单的方法或框架来使C#中的日期范围内的所有周末?

是否也可以使用LINQ?

任何线索?

谢谢!

Mit*_*tch 14

如果您想要枚举所有日子,可以使用linq过滤到周末:

IEnumerable<DateTime> GetDaysBetween(DateTime start, DateTime end)
{
    for (DateTime i = start; i < end; i = i.AddDays(1))
    {
        yield return i;
    }
}

var weekends = GetDaysBetween(DateTime.Today, DateTime.Today.AddDays(365))
    .Where(d => d.DayOfWeek == DayOfWeek.Saturday || d.DayOfWeek == DayOfWeek.Sunday);
Run Code Online (Sandbox Code Playgroud)

  • 想知道为什么这被否决了,对我来说看起来不错,虽然它比其他一些解决方案更耗电(避免枚举所有日子只是为了过滤它们),但它是一个非常简单/干净/可维护的解决方案,解决了一个不太可能解决的问题除非OP工作了数千年,否则永远会成为瓶颈。点赞以补偿。 (3认同)
  • @RonanThibaudau,这实际上是我之前测试过的。尽管您可能会想象到性能明显下降,但我发现在大多数测试中,朴素版本实际上优于“智能”版本。这些测试主要关注日期模数,因此我不能说它们在使用“DayOfWeek”枚举时是否同样适用。不过,我确实同意“程序应该编写供人们阅读,并且只是顺便供机器执行”。 (2认同)

Dev*_*per 3

我找到了怎么做。

http://www.dotnetjalps.com/2011/06/finding-saturdaysunday- Between-date.html

namespace DatimeApplication
{
   class Program
   {
       static void Main(string[] args)
       {
             DateTime startDate=new DateTime(2011,3,1);
             DateTime endDate = DateTime.Now;

             TimeSpan diff = endDate - startDate;
             int days = diff.Days;
             for (var i = 0; i <= days; i++)
             {
                 var testDate = startDate.AddDays(i);
                 switch (testDate.DayOfWeek)
                 {
                     case DayOfWeek.Saturday:
                     case DayOfWeek.Sunday:
                         Console.WriteLine(testDate.ToShortDateString());
                         break;
                 }
             }
           Console.ReadLine();
       }
   }
}
Run Code Online (Sandbox Code Playgroud)