获得下一个月的第一天

Benjoe.

新成员
加入
2019年4月12日
消息
3
编程经验
1-3
我有一个代码,给我一个月的第n天。两个日期之间。现在我想要的是检查开始日期是否不是月份的第n个日,将开始日期移动到下个月相同的第一天。例如。
用户输入的开始日期为06/27/2019,这是星期四,但希望星期一的第一个月为06/3/2019,这已经通过,所以新的开始日期应该是07/1/2019。如何获得我的代码来实现这一目标。
以下是我的完整代码。
C#:
class Program
    {
        public class BusinessWeekDays
        {
            public DateTime Monday;
            public DateTime Sunday;
        }

        public static List<DateTime> GetDatesByOrdinalDayV2(DateTime startDate, DateTime endDate, DayOfWeek dayOfWeek,
            int ordinal)
        {
            var foundDates = new List<DateTime>();
            ordinal = Math.Min(Math.Max(ordinal, 1), 5);
            while (startDate < endDate)
            {
                var month = startDate.Month;

                var workingDate = new DateTime(startDate.Year, month, 1);

                workingDate = (int)workingDate.DayOfWeek > (int)dayOfWeek
                    ? workingDate.AddDays(7 - (int)workingDate.DayOfWeek + (int)dayOfWeek)
                    : workingDate.AddDays((int)dayOfWeek - (int)workingDate.DayOfWeek);

                workingDate = workingDate.AddDays((ordinal - 1) * 7);
                workingDate = workingDate.Month != month ? workingDate.AddDays(-7) : workingDate;
                foundDates.Add(workingDate);
                startDate = startDate.AddMonths(1);
            }

            return foundDates;
        }

        static void Main(string[] args)
        {

            var StartDate = DateTime.Parse("06/27/2019");
            var SeriesEndDate = DateTime.Parse("09/30/2019");
            var months = new List<BusinessWeekDays>();
            var secondTuesday = GetDatesByOrdinalDayV2(StartDate, SeriesEndDate, DayOfWeek.Monday, 1);
            var dateStrings = secondTuesday
                .Select(dateTime => dateTime.ToString("d MMM yyyy")).ToList();

            foreach (var date in dateStrings)
            {
                if (StartDate.DayOfWeek != DayOfWeek.Monday)----> start date is not Monday
                {
                    months.Add(new BusinessWeekDays
                    {
                        Monday = Convert.ToDateTime(date).AddMonths(1),----Start Monday 7/1/2019
                        Sunday = Convert.ToDateTime(date).AddMonths(1).AddDays(7)
                    });
                    Console.WriteLine(months);
                }
                else
                {
                    months.Add(new BusinessWeekDays
                    {
                        Monday = Convert.ToDateTime(date),
                        Sunday = Convert.ToDateTime(date).AddDays(7)
                    });
                }
            }

         

        }
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,162
地点
挪威
编程经验
10+
您是否询问如何找到一个月的星期一?
C#:
private DateTime FirstMonday(int year, int month) {
    return Enumerable.Range(1, 7)
                     .Select(day => new DateTime(year, month, day))
                     .Where(date => date.DayOfWeek == DayOfWeek.Monday)
                     .First();
}
 

Benjoe.

新成员
加入
2019年4月12日
消息
3
编程经验
1-3
嗨,约翰
我不认为你很好地读了我的问题。我的代码已经给了我第一个,星期一,星期二等等,我问的一切是,6月的第一个星期一是第3次 - >2011年6月3日。因此,用户输入了6/27/2019,它通过了6/3/2019,如何在2011年7月1日开始新的开始日期。
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,162
地点
挪威
编程经验
10+
所以问题是:如果当前日期不是本月星期一,那么下个月的第一个星期一?
 
Last edited:

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,162
地点
挪威
编程经验
10+
这与我发布的方法不难以做好,如果给定日期较少或等于您在手头上即将到来的那个价值,您会致电给定日期(其年份和月份值)的第一个星期一
如果不是,你再次叫它以获得下个月的第一个星期一。您可以使用DateTime.addmonths方法来获取下个月的日期值,以便您对该方法进行正确的年份和月份。
 
Last edited:
最佳 底部