在C#中获取上周/下周的星期三日期

我将如何获得上周三和周三周三在C#中的日期:

public Form1() { InitializeComponent(); CurrentDate.Text = "Today's Date: " + DateTime.Now.ToString("dd/MM/yyyy"); CurrentRent.Text = "Current Rent Date: "; // last wednesday NextRent.Text = "Next Rent Date: "; // next wednesday } 

要找到下周三,请继续添加天数,直至找到。 要查找上一个星期三,只需减去天数,直到找到一个。

 DateTime nextWednesday = DateTime.Now.AddDays(1); while (nextWednesday.DayOfWeek != DayOfWeek.Wednesday) nextWednesday = nextWednesday.AddDays(1); DateTime lastWednesday = DateTime.Now.AddDays(-1); while (lastWednesday.DayOfWeek != DayOfWeek.Wednesday) lastWednesday = lastWednesday.AddDays(-1); 

DateTime.Now.AddDays(7)DateTime.Now.AddDays(-7)是你如何做算术,假设你在星期三。 如果不是,您需要做的是使用DayOfWeek属性来确定确定哪一天是“星期三”所需的天数(正数和负数)。 然后,您可以将该值传递给AddDays

例如,如果今天是星期二,你将在上周三获得AddDays(-6) AddDays(8) ,在下周三获得AddDays(8)

我会告诉你计算这些的任务。

使用AddDays例程:

  // increment by the number of offset days to get the correct date DayOfWeek desiredDay = DayOfWeek.Wednesday; int offsetAmount = (int) desiredDay - (int) DateTime.Now.DayOfWeek; DateTime lastWeekWednesday = DateTime.Now.AddDays(-7 + offsetAmount); DateTime nextWeekWednesday = DateTime.Now.AddDays(7 + offsetAmount); 

应该这样做!

注意:如果是星期一,“上周三”会给你发生的最后一个星期三,但是“下周三”会给你9天后的星期三! 如果您希望在两天内获得星期三,则需要使用“%”运算符。 这意味着第二个“nextweek”语句将显示为“(7 + offsetAmount)%7”。

您可以使用它来计算它:

 DateTime day = DateTime.Today; while (day.DayOfWeek != DayOfWeek.Wednesday) day = day.AddDays(-1); var currentRent = day; var nextRent = day.AddDays(7); 

请注意,如果今天是星期三,这将显示currentRent为今天,而不是今天的nextRent 。 如果你想要反转,你可以颠倒逻辑。

 DateTime day = DateTime.Today; while (day.DayOfWeek != DayOfWeek.Wednesday) day = day.AddDays(1); var currentRent = day.AddDays(-7); var nextRent = day; 

您将要使用DayOfWeek枚举以及switch语句的if-else结构来确定添加/减去日期的天数。 这是繁琐的编码,但很简单。

 DateTime nextRent; DateTime lastRent; DateTime today = DateTime.Now; if (today.DayOfWeek == DayOfWeek.Wednesday) { nextRent = today.AddDays(7); lastRent = today.AddDays(-7); } else if (today.DayOfWeek == DayOfWeek.Thursday) { nextRent = today.AddDays(6); lastRent = today.AddDays(-8); } //ect for all days 

这会奏效。 您需要计算您提供的日期与最近的星期三之间的天数差异,并根据差异是否大于零来计算上一个/下一个星期三。

 int difference = date.DayOfWeek - DayOfWeek.Wednesday; DateTime lastWednesday = difference > 0 ? date.AddDays(-1 * difference) : date.AddDays(-1 * (7 + difference)); DateTime nextWednesday = lastWednesday.AddDays(7); 

改进了Servy的答案。 您需要将whileWednesday或lastWednesday日期实际设置为while循环中的新日期,否则它将进入无限循环

 DateTime nextWednesday = DateTime.Now.AddDays(1); while (nextWednesday.DayOfWeek != DayOfWeek.Wednesday) nextWednesday = nextWednesday.AddDays(1); DateTime lastWednesday = DateTime.Now.AddDays(-1); while (lastWednesday.DayOfWeek != DayOfWeek.Wednesday) lastWelastWednesday.AddDays(-1); 

您可以创建2个DateTime扩展方法,可以与DayOfWeek参数一起使用:

 public static class DateTimeExtension { public static DateTime GetPreviousWeekDay(this DateTime currentDate, DayOfWeek dow) { int currentDay = (int)currentDate.DayOfWeek, gotoDay = (int)dow; return currentDate.AddDays(-7).AddDays(gotoDay-currentDay); } public static DateTime GetNextWeekDay(this DateTime currentDate, DayOfWeek dow) { int currentDay = (int)currentDate.DayOfWeek, gotoDay = (int)dow; return currentDate.AddDays(7).AddDays(gotoDay - currentDay); } } 

然后可以使用以下内容:

 DateTime testDate = new DateTime(2017, 01, 21); Console.WriteLine(testDate.GetPreviousWeekDay(DayOfWeek.Wednesday)); Console.WriteLine(testDate.GetNextWeekDay(DayOfWeek.Wednesday)); 
  private static DateTime FindPreviousDayOfWeek(DateTime fromDate, DayOfWeek findDay, bool skipSame = false) { if (fromDate.DayOfWeek < findDay) fromDate = fromDate.AddDays(-((int)fromDate.DayOfWeek - 1 + (int)findDay)); else if (fromDate.DayOfWeek > findDay) fromDate = fromDate.AddDays(-((int)fromDate.DayOfWeek - (int)findDay)); else if (fromDate.DayOfWeek == findDay && skipSame == true) fromDate = fromDate.AddDays(-7); return fromDate; } 

如果将saem作为所需日期,则skipSame变量不包括当前日期。

这是一个完成相同的单线程。 了解它实际上是如何工作有点令人难以置信但它确实如此:

下周三:

  dt.AddDays(-(int)(dt.AddDays(-4).DayOfWeek) + 6); 

上周三

  dt.AddDays(-(int)(dt.AddDays(-3).DayOfWeek)); 

在这两种情况下,它将在星期三返回当天。 这适用于任何工作日,只需调整AddDays()调用中的数字即可。 例如星期五:

下周五

  dt.AddDays(-(int)(dt.AddDays(-6).DayOfWeek) + 6); 

上周五

  dt.AddDays(-(int)(dt.AddDays(-5).DayOfWeek));