如何获取给定日期的下个月第一个星期日



我正在寻找一些逻辑来获取日期,使用 c# 获取给定日期的下个月第一个星期日。如何使用 c# 获取给定日期的下个月第一个星期日?

你没有表现出任何努力,但让我们一步一步地编写 Jon 所说的代码;

如何获取给定日期的下个月第一个星期日

我们将dt称为您问题中给定日期DateTime。所有月份都以1作为日期数字开始。这就是为什么我们可以创建一个名为firstDayOfNextMonthDateTime

DateTime firstDayOfNextMonth = new DateTime(dt.Year, dt.Month + 1, 1);

现在怎么办?当然,我们需要检查日期名称,它是否是星期日。 直到什么时候?直到我们找到一天作为星期天。这就是为什么我们需要迭代这一天(每一天 1 天)直到找到它。我们可以对给出的日期名称使用DayOfWeek枚举。

让我们在代码中将DateTime定义为firstSundayOfNextMonth;

DateTime firstSundayOfNextMonth;

现在迭代下周的第一天,直到我们找到一个星期天;

while (firstDayOfNextMonth.DayOfWeek != DayOfWeek.Sunday)
{
    firstDayOfNextMonth = firstDayOfNextMonth.AddDays(1);
}

当此while语句停止工作时?是的,当我们找到第一个星期天时。这就是为什么我们需要将此值分配给此循环之外firstSundayOfNextMonth变量。

while (firstDayOfNextMonth.DayOfWeek != DayOfWeek.Sunday)
{
    firstDayOfNextMonth = firstDayOfNextMonth.AddDays(1);
}
firstSundayOfNextMonth = firstDayOfNextMonth;

我们找到了。 firstSundayOfNextMonth是给定DateTime下个月的第一个星期日(在我们的例子中dt)。

public static DateTime GetFirstSundayOfNextMonth(DateTime givenDate)
{
    DateTime firstDayNextMonth = givenDate.AddDays(-givenDate.Day + 1).AddMonths(1);
    int diff = 7 - (int)firstDayNextMonth.DayOfWeek;
    return firstDayNextMonth.AddDays(diff);
}

试试这个:

 DateTime dt1 = new DateTime(2015, 03, 13);
 DateTime dm = dt1.AddMonths(1);
 DateTime addm = new DateTime(dm.Year,dm.Month,1);
 var nextSunday = addm.AddDays(7 - (int)addm.DayOfWeek);  

您可以用任何日期代替2015, 03, 13,例如 year,month,day .

为了在某个日期之后获得下一个工作日,我找到了一个简单的方法。

public static DateTime FirstDayOfWeekOnOrAfter(this DateTime date, DayOfWeek dayOfWeek)
{
  return date.AddDays(Math.Abs(dayOfWeek - date.DayOfWeek));
}
public static DateTime FirstDayOfWeekOnOrBefore(this DateTime date, DayOfWeek dayOfWeek)
{
  return date.AddDays(-Math.Abs(dayOfWeek - date.DayOfWeek));
}
DateTime nextMonthfirstSunday;
        DayOfWeek firstDay = new DateTime(DateTime.Now.Year, DateTime.Now.Month+1, 1).DayOfWeek;
        switch (firstDay)
        {
            case DayOfWeek.Sunday:
                nextMonthfirstSunday = new DateTime(DateTime.Now.Year, DateTime.Now.Month+1, 1);
                break;
            case DayOfWeek.Monday:
                nextMonthfirstSunday = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, 7);
                break;
            case DayOfWeek.Tuesday:
                nextMonthfirstSunday = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, 6);
                break;
            case DayOfWeek.Wednesday:
                nextMonthfirstSunday = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, 5);
                break;
            case DayOfWeek.Thursday:
                nextMonthfirstSunday = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, 4);
                break;
            case DayOfWeek.Friday:
                nextMonthfirstSunday = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, 3);
                break;
            default://Saturday
                nextMonthfirstSunday = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, 2);
                break;
        }
public static DateTime GetFirstSundayOfNextMonth(DateTime dt)
{
    dt = dt.AddMonths(1); // In case of December using new DateTime(dt.Year, dt.Month + 1, 1) could throw and error. So first use .AddMonths(1).
    dt = new DateTime(dt.Year, dt.Month, 1); // Get first date of month
    return dt.AddDays((7 - dt.DayOfWeek.GetHashCode() + DayOfWeek.Sunday.GetHashCode()) % 7); // get first sunday.
}

最新更新