[英]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:僅解釋我使用的概念:
計算兩個給定日期之間的所有天數>這是我們的最終計數器
現在將一天增加到startDate
,同時檢查日期是否在給定的日期內 ,比如說星期一 (我為此使用了switch
例)。 如果是,則將date
與loop #no
一起添加到字典中,以作為以后使用的索引 。 循環直到我們到達櫃台 。
現在,對於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.