14天(每两周一次)提前逻辑和顺序

时间:2016-03-19 05:07:59

标签: c#

任何人都可以帮助我。我需要C#logic用于提前显示和序列顺序六个日期列表在星期一。提前日期清单应在下午12点后更改。例如,在3月28日星期一,日期将显示在同一天(3月28日)至下午12点。下午12点01分后,第一个日期从2016年4月11日开始。同样的序列(附加屏幕)。它永远不会显示4月4日,4月18日等。(序列顺序)..

这是我努力的C#代码,它只显示单个日期列表。

  public static void Main(string[] args)
        {
           DateTime time = new DateTime(2016, 3, 25);
            var breaks = DateTime.Today.AddHours(12D);
           if (breaks>=DateTime.Now)
          {
                                 
           
          }
          else if (time<DateTime.Now)
          {


          }
           
           DateTime anotherTime = DateTime.Now;
            var allTimes = new HashSet<DateTime>();

            for (int i = 0; i < 6; i++)
            {
                anotherTime = time.AddDays(14);
                time = anotherTime;
                Console.WriteLine(anotherTime.ToLongDateString());
                allTimes.Add(time);
            }


    }
    }

这是我最后提前六个日期列表

enter image description here

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解你到底想要什么。但是我的存储库中有类似的功能。

    public static DateTime GetNextDayOfWeek(DateTime _date, DayOfWeek _dayOfWeek)
    {
        DateTime Result;
        int diff = _date.DayOfWeek - _dayOfWeek;
        if (diff == 0 && _date.Hour * 100 + _date.Minute <= 1200)
            return _date;
        if (diff < 0)
        {
            diff += 7;
        }
        Result = _date.AddDays(-1 * diff).Date;
        if (Result <= _date)
            Result = Result.AddDays(7);
        return Result;
    }

我根据您的需要添加了这部分

if (diff == 0 && _date.Hour * 100 + _date.Minute <= 1200) return _date;

此功能采用日期和所需的星期几,并返回所需的星期几的最近的下一个日期。 因为我知道你想要6包这些,你可以把它放在这样的循环中:

DateTime next;
next=DateTime.Now;
foreach(DayOfWeek dow in Enum.GetValues(typeof(DayOfWeek)))
{
    for(var n=0;n<6;n++)
    {
        next=GetNextDayOfWeek(next, dow);
        //do something with your date
    }
}

您可以添加另一个参数,指出您前进的天数。目前它固定为7.在你的情况下你需要14。

答案 1 :(得分:1)

试试这个

static void Main(string[] args)
        {
            DateTime today = DateTime.Now;
            if ((today.DayOfWeek == DayOfWeek.Monday) && (today > new DateTime(today.Year, today.Month, today.Day, 12, 0, 0)))
            {
                today.AddDays(1);
            }
            int offsetToMonday = 7 - (((int)today.DayOfWeek - 1) % 7);
            DateTime nextMonday = today.AddDays(offsetToMonday);
            DateTime startDate = (nextMonday.DayOfYear / 7 % 2) == 0 ? nextMonday : nextMonday.AddDays(7);
            DateTime endDate = startDate.AddDays(83);
            List<DateTime> dates = new List<DateTime>();

            for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
            {
                dates.Add(date);
            }

            var groupedDays = dates.AsEnumerable()
                .GroupBy(x => x.Subtract(startDate).Days % 14)
                .OrderBy(x => x.Key)
                .Where(x => x.Key == 0);

            foreach (var group in groupedDays)
            {
                foreach (DateTime day in group)
                {
                    Console.WriteLine(day.ToString("dddd, dd MMMM yyyy"));
                }
                Console.WriteLine();
            }
            Console.ReadLine();
        }