簡體   English   中英

每n周獲取與開始日期和結束日期黑白相符的日期

[英]get the dates of days matching b/w the start date and end date every nth week

假設兩個日期

20/06/2017和20/10/2017

我有一個要求,我需要每n周獲取開始日期和結束日期之間匹配的日期!

例如:

我從UI中得到一些輸入,其中說,在上述開始日期和結束日期之間的每個第3周的每個星期一和星期四

我需要獲取每3周的每個星期一和星期四的日期,從20/7到20/10

我怎樣才能做到這一點?

我現在已經寫了

private static List<DateTime> Get(DateTime startingDate,DateTime endingDate,int pattern)
{
    for (DateTime date = startingDate; date <= endingDate; date = date.AddDays(pattern))
        allDates.Add(date);

}

這需要一個開始日期和結束日期,並提供與該模式匹配的日期。 例如:-如果開始= 20/07,結束是30/07並且模式是2,則返回22 / 07,24 / 07,26 / 07 ....

這是您問題的簡短解決方案

DateTime startDate = new DateTime(2017, 05, 1);
DateTime endDate = new DateTime(2017, 07, 21); 
Dictionary<int, string> DictionOfDates = new Dictionary<int, string>();
int weekNoCount = 3; //Every 3rd week
TimeSpan tsdiff = endDate - startDate;
int days = tsdiff.Days; //total #days in the difference from start to end
for (var i = 0; i <= days; i++)
{
    var date = startDate.AddDays(i);
    switch (date.DayOfWeek)
    {                
      case DayOfWeek.Monday:
           DictionOfDates.Add(i, date.ToShortDateString());
           break;
    }
}

foreach (var item in DictionOfDates)
{
   if (item.Key % weekNoCount == 0) //Check remainder is zero when divided by weekCount
       MessageBox.Show(item.Value); //prints the date which you want after the n'th week check
}

我想其中的所有內容都是不言自明的,但是如果您有任何困惑,請務必發表評論。

編輯1:僅解釋我使用的概念:

  1. 計算兩個給定日期之間的所有天數>這是我們的最終計數器

  2. 現在將一天增加到startDate ,同時檢查日期是否在給定的日期內 ,比如說星期一 (我為此使用了switch例)。 如果是,則將dateloop #no一起添加到字典中,以作為以后使用的索引 循環直到我們到達櫃台

  3. 現在,對於Dictionary所有條目,如果索引可以被給定的第n個周檢查數除,則獲取日期。

而已!

編輯2:像這樣創建一個方法

private void Form1_Load(object sender, EventArgs e)
{
     DateTime startDate = new DateTime(2017, 05, 1);
     DateTime endDate = new DateTime(2017, 07, 21);
     int weekNoCount = 3; //Every 3rd week
     DayOfWeek[] days = new DayOfWeek[2] { DayOfWeek.Monday, DayOfWeek.Thursday }; //Pass required days here
     FetchTheDays(startDate, endDate, weekNoCount, days);
}

private void FetchTheDays(DateTime startDate, DateTime endDate, int weekNoCount, DayOfWeek[] daysofWeek)
{
     Dictionary<int, DateTime> DictionOfDates = new Dictionary<int, DateTime>();

     TimeSpan tsdiff = endDate - startDate;
     int days = tsdiff.Days; //total #days in the difference from start to end
     for (var i = 0; i <= days; i++)
     {
         var date = startDate.AddDays(i);
         foreach (var weekday in daysofWeek)
         {
             if (date.DayOfWeek == weekday)
             DictionOfDates.Add(i, date);
         }
     }

     string testExample = "";
     foreach (var item in DictionOfDates)
     {
         if (item.Key % weekNoCount == 0) //Check remainder is zero when divided by weekCount
         testExample += (item.Value.ToShortDateString() + " (" + item.Value.DayOfWeek + ")" + "\n"); 
     }

     MessageBox.Show(testExample);
}

輸出:

輸出值

希望你現在可能已經有了主意

這可能是另一種方法。

using System;
using System.Collections.Generic;


namespace ConsoleApp3
{
class Program
{


    static void Main(string[] args)
    {
        var validDates = new List<DateTime>();
        getDates(new DateTime(17,7,20), new DateTime(17,10,20),new List<DayOfWeek> { DayOfWeek.Monday, DayOfWeek.Thursday },out validDates, 3);

        validDates.ForEach(date => Console.WriteLine(date.ToString("dd/MM")));
        Console.ReadKey();
    }

    static void getDates(DateTime startDate, DateTime endDate, List<DayOfWeek> daysOfTheWeek, out List<DateTime> validDates, int pattern)
    {
        validDates = new List<DateTime>();
        for (var i = startDate; i <= endDate; i=i.AddDays(7*(pattern-1)))
        {
            for (int j = 0; j < 7; j++)
            {
                if (daysOfTheWeek.Contains(i.DayOfWeek))
                {
                    validDates.Add(i);
                }
                i=i.AddDays(1);

                if (i >= endDate || i.DayOfWeek == DayOfWeek.Monday) //assuming you were counting weeks starting on Monday
                    break;
            }
        }

    }
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM