C# 从开始日期到年底,每周五查找

C# 从开始日期到年底,每周五查找,c#,datetime,C#,Datetime,所以我回来问另一个令人困惑的日期时间问题 在C#中,从开始日期(DateTime.Now)到今年年底,我如何返回每个星期五的(天) 例如,今天是19号星期五,它会返回,26,2,9,16,23,30,7等等。这会做你想做的事 IList<int> getFridaysForYearFromPoint(DateTime startDate) { DateTime currentFriday = startDate; List<int> results = n

所以我回来问另一个令人困惑的日期时间问题

在C#中,从开始日期(
DateTime.Now
)到今年年底,我如何返回每个星期五的(天)


例如,今天是19号星期五,它会返回,26,2,9,16,23,30,7等等。这会做你想做的事

IList<int> getFridaysForYearFromPoint(DateTime startDate)
{
    DateTime currentFriday = startDate;
    List<int> results = new List<int>();

    //Find the nearest Friday forward of the start date
    while(currentFriday.DayOfWeek != DayOfWeek.Friday)
    {
        currentFriday = currentFriday.AddDays(1);
    }

    //FIND ALL THE FRIDAYS!
    int currentYear = startDate.Year;
    while (currentFriday.Year == currentYear)
    {
        results.Add(startDate.Day);
        currentFriday = currentFriday.AddDays(7);
    }

    return results;
}
IList getFridaysForYearFromPoint(日期时间开始日期)
{
DateTime currentFriday=开始日期;
列表结果=新列表();
//查找距开始日期最近的星期五
while(currentFriday.DayOfWeek!=DayOfWeek.Friday)
{
currentFriday=currentFriday.AddDays(1);
}
//找到所有的星期五!
int currentYear=起始日期年;
while(currentFriday.Year==currentYear)
{
结果。添加(开始日期:天);
currentFriday=currentFriday.AddDays(7);
}
返回结果;
}
这行吗

static IEnumerable<DateTime> GetFridays(DateTime startdate, DateTime enddate)
{
    // step forward to the first friday
    while (startdate.DayOfWeek != DayOfWeek.Friday)
        startdate = startdate.AddDays(1);

    while (startdate < enddate)
    {
        yield return startdate;
        startdate = startdate.AddDays(7);
    }
}
静态IEnumerable GetFridays(日期时间开始日期、日期时间结束日期)
{
//前进到第一个星期五
while(startdate.DayOfWeek!=DayOfWeek.Friday)
startdate=startdate.AddDays(1);
while(开始日期<结束日期)
{
产量回报起始日期;
startdate=startdate.AddDays(7);
}
}
var start=DateTime.Today;
var startDay=((int)start.DayOfWeek);
var nextFriday=startDay我的答案

    static void Main(string[] args)
    {
        DateTime begin = DateTime.Now;
        DateTime end = DateTime.Now.AddDays(200);

        while (begin <= end)
        {
            if (begin.DayOfWeek == DayOfWeek.Friday)
                Console.WriteLine(begin.ToLongDateString());
            begin = begin.AddDays(1);
        }

        Console.ReadKey();
    }
static void Main(字符串[]args)
{
DateTime begin=DateTime.Now;
DateTime end=DateTime.Now.AddDays(200);

而(begin您可以使用以下的日历周期收集器


我是vb.net的专家,但也没什么不同

我在
asp.net
web表单的
page\u load
中编写了下面的代码

  • 制作一个
    asp.net
    应用程序
  • 向其中添加一个web表单
  • 将下面的代码写入
    page\u load

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim gc As New System.Globalization.GregorianCalendar
        Dim d As New DateTime(gc.GetYear(DateTime.Now), 1, 1)
        Dim i As Int16 = 1
        While i <= gc.GetDaysInYear(gc.GetYear(DateTime.Now))
            If gc.GetDayOfWeek(d) = DayOfWeek.Friday Then
                Response.Write(d & "<br />")
                d = gc.AddDays(d, 7)
                i += 7
            Else
                d = gc.AddDays(d, 1)
                i += 1
            End If
        End While
    End Sub
    
    Protected Sub Page_Load(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
    Dim gc作为新系统.Globalization.GregorianCalendar
    Dim d作为新的日期时间(gc.GetYear(DateTime.Now),1,1)
    尺寸i为Int16=1
    
    我的开始日期是星期五,还是你也需要计算出第一个星期五?我需要计算出第一个星期五,因为当我检查时,这一天并不总是星期五。
    // ----------------------------------------------------------------------
    public void FindRemainigYearFridaysSample()
    {
      // filter: only Fridays
      CalendarPeriodCollectorFilter filter = new CalendarPeriodCollectorFilter();
      filter.WeekDays.Add( DayOfWeek.Friday );
    
      // the collecting period
      CalendarTimeRange collectPeriod = new CalendarTimeRange( DateTime.Now, new Year().End.Date );
    
      // collect all Fridays
      CalendarPeriodCollector collector = new CalendarPeriodCollector( filter, collectPeriod );
      collector.CollectDays();
    
      // show the results
      foreach ( ITimePeriod period in collector.Periods )
      {
        Console.WriteLine( "Friday: " + period );
      }
    } // FindRemainigYearFridaysSample
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim gc As New System.Globalization.GregorianCalendar
        Dim d As New DateTime(gc.GetYear(DateTime.Now), 1, 1)
        Dim i As Int16 = 1
        While i <= gc.GetDaysInYear(gc.GetYear(DateTime.Now))
            If gc.GetDayOfWeek(d) = DayOfWeek.Friday Then
                Response.Write(d & "<br />")
                d = gc.AddDays(d, 7)
                i += 7
            Else
                d = gc.AddDays(d, 1)
                i += 1
            End If
        End While
    End Sub