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

met*_*lah 18 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
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 34

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

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);
Run Code Online (Sandbox Code Playgroud)

  • +1,比我给出的答案干净得多。建议使用这个或其他类似的答案。 (2认同)
  • 另一种方法是如图所示找到 nextWednesday,然后使用 .AddDays(-7) 来获取 lastWednesday,而不是另一个 while 循环。 (2认同)

dre*_*w_w 7

使用 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);
Run Code Online (Sandbox Code Playgroud)

应该这样做!

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


小智 7

您可以创建 2 个 DateTime Extension 方法,可与 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后可以按如下方式使用:

DateTime testDate = new DateTime(2017, 01, 21);

Console.WriteLine(testDate.GetPreviousWeekDay(DayOfWeek.Wednesday));
Console.WriteLine(testDate.GetNextWeekDay(DayOfWeek.Wednesday));
Run Code Online (Sandbox Code Playgroud)


Dar*_*opp 5

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

例如,如果今天是星期二,你会AddDays(-6)在上周三和AddDays(8)下周三.

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