我正在寻找一些逻辑来获取日期,使用 c# 获取给定日期的下个月第一个星期日。如何使用 c# 获取给定日期的下个月第一个星期日?
你没有表现出任何努力,但让我们一步一步地编写 Jon 所说的代码;
如何获取给定日期的下个月第一个星期日
我们将dt
称为您问题中给定日期的DateTime
。所有月份都以1
作为日期数字开始。这就是为什么我们可以创建一个名为firstDayOfNextMonth
的DateTime
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.
}