C# 如何得到4。下个月的星期三是DateTime吗?

C# 如何得到4。下个月的星期三是DateTime吗?,c#,datetime,C#,Datetime,我需要一个函数,它给我下个月的第n个日期时间。 我需要下个月的第四个星期三 我的代码传递了错误的日期: private static DateTime FindNextDay(DayOfWeek dayOfWeek, DateTime fday, Int32 instance) { DateTime day = new DateTime(fday.Year, fday.Month, 1, fday.Hour, fday.Minute, fday.Second); // DateT

我需要一个函数,它给我下个月的第n个日期时间。 我需要下个月的第四个星期三

我的代码传递了错误的日期:

private static DateTime FindNextDay(DayOfWeek dayOfWeek, DateTime fday, Int32 instance)
{
    DateTime day = new DateTime(fday.Year, fday.Month, 1, fday.Hour, fday.Minute, fday.Second);
    // DateTime day is in this Example= 2014-08.01 11.00 AM   
     if (instance == 2)
     {
         day = day.AddDays(7);
     }
     else if (instance == 3)
     {
         day = day.AddDays(14);
     }
     else if (instance == 4)  //if the 4th week is requested
     {
         day = day.AddDays(28); // i add 28 days
     }
     while (day.DayOfWeek != dayOfWeek)
     {
         day = day.AddDays(1);   // and search the wednesday and return it back
     }
    return day;
}

您能给我看一个更好的解决方案吗?

将最后一个选项更改为:

else if (instance == 4)  //if the 4th week is requested
    {
        day = day.AddDays(21); // i add 28 days
    }

您应该添加21天,而不是28天。

将最后一天更改为:

else if (instance == 4)  //if the 4th week is requested
    {
        day = day.AddDays(21); // i add 28 days
    }

您应该添加21天,而不是28天。

因为我太懒了,所以我编写的代码如下

DateTime firstDayOfNextMonth = new DateTime(2014, DateTime.Now.Month + 1, 1);
int count = 0;
    if (firstDayOfNextMonth.DayOfWeek == DayOfWeek.Wednesday)
        count = 1;
while (count != 4)
{
    firstDayOfNextMonth = firstDayOfNextMonth.AddDays(1);
    if (firstDayOfNextMonth.DayOfWeek == DayOfWeek.Wednesday)
        count++;
}
Console.WriteLine(firstDayOfNextMonth);
基本上,我检查下个月的第一天是否是星期三,然后迭代我的日期时间找到4。下个月的星期三

它为今天工作,并打印下个月第四个星期三的2014年8月27日

您可以编写一个扩展方法,如

public static class DateTimeExtensions
{
    public static void FindInstanceNextMonth(DateTime Now, DayOfWeek day, int instance)
    {
        DateTime firstDayOfNextMonth = new DateTime(Now.Year, Now.Month + 1, 1);
        int count = 0;
        if (firstDayOfNextMonth.DayOfWeek == day)
            count = 1;
        while (count != instance)
        {
            firstDayOfNextMonth = firstDayOfNextMonth.AddDays(1);
            if (firstDayOfNextMonth.DayOfWeek == day)
                count++;
        }
        Console.WriteLine(firstDayOfNextMonth);
    }
}
并称之为

DateTimeExtensions.FindInstanceNextMonth(DateTime.Now, 
                                         DayOfWeek.Wednesday,
                                         4);

因为我太懒了,所以我写的代码如下

DateTime firstDayOfNextMonth = new DateTime(2014, DateTime.Now.Month + 1, 1);
int count = 0;
    if (firstDayOfNextMonth.DayOfWeek == DayOfWeek.Wednesday)
        count = 1;
while (count != 4)
{
    firstDayOfNextMonth = firstDayOfNextMonth.AddDays(1);
    if (firstDayOfNextMonth.DayOfWeek == DayOfWeek.Wednesday)
        count++;
}
Console.WriteLine(firstDayOfNextMonth);
基本上,我检查下个月的第一天是否是星期三,然后迭代我的日期时间找到4。下个月的星期三

它为今天工作,并打印下个月第四个星期三的2014年8月27日

您可以编写一个扩展方法,如

public static class DateTimeExtensions
{
    public static void FindInstanceNextMonth(DateTime Now, DayOfWeek day, int instance)
    {
        DateTime firstDayOfNextMonth = new DateTime(Now.Year, Now.Month + 1, 1);
        int count = 0;
        if (firstDayOfNextMonth.DayOfWeek == day)
            count = 1;
        while (count != instance)
        {
            firstDayOfNextMonth = firstDayOfNextMonth.AddDays(1);
            if (firstDayOfNextMonth.DayOfWeek == day)
                count++;
        }
        Console.WriteLine(firstDayOfNextMonth);
    }
}
并称之为

DateTimeExtensions.FindInstanceNextMonth(DateTime.Now, 
                                         DayOfWeek.Wednesday,
                                         4);
像这样的

记下下下个月的第一天,当你找到一个星期三时,记下你遇到的添加到它的
星期三的数量。当计数为4时返回

private static DateTime GetFourthWednesday()
{
    DateTime firstOfMonth = new DateTime(DateTime.Now.AddMonths(1).Year, DateTime.Now.AddMonths(1).Month, 1);

    int count = 0;
    while (count < 4)
    {
        if (firstOfMonth.DayOfWeek == DayOfWeek.Wednesday)
        {
            count++;
        }

        if (count == 4)
        {
            return firstOfMonth;
        }

        firstOfMonth = firstOfMonth.AddDays(1);

    }

    return firstOfMonth;
}
private static DateTime GetFourthWednesday()
{
DateTime firstOfMonth=新的日期时间(DateTime.Now.AddMonths(1).Year,DateTime.Now.AddMonths(1).Month,1);
整数计数=0;
而(计数<4)
{
if(firstOfMonth.DayOfWeek==DayOfWeek.周三)
{
计数++;
}
如果(计数=4)
{
返回第一个月;
}
firstOfMonth=月初添加天数(1);
}
返回第一个月;
}
如果今天运行,则给出2014年8月27日

记下下下个月的第一天,当你找到一个星期三时,记下你遇到的添加到它的
星期三的数量。当计数为4时返回

private static DateTime GetFourthWednesday()
{
    DateTime firstOfMonth = new DateTime(DateTime.Now.AddMonths(1).Year, DateTime.Now.AddMonths(1).Month, 1);

    int count = 0;
    while (count < 4)
    {
        if (firstOfMonth.DayOfWeek == DayOfWeek.Wednesday)
        {
            count++;
        }

        if (count == 4)
        {
            return firstOfMonth;
        }

        firstOfMonth = firstOfMonth.AddDays(1);

    }

    return firstOfMonth;
}
private static DateTime GetFourthWednesday()
{
DateTime firstOfMonth=新的日期时间(DateTime.Now.AddMonths(1).Year,DateTime.Now.AddMonths(1).Month,1);
整数计数=0;
而(计数<4)
{
if(firstOfMonth.DayOfWeek==DayOfWeek.周三)
{
计数++;
}
如果(计数=4)
{
返回第一个月;
}
firstOfMonth=月初添加天数(1);
}
返回第一个月;
}

如果今天运行,给出了2014年8月27日的
27
,您意外的输出是什么?您的问题是,您增加了28天来获得第四个星期三,但2014年8月的第四个星期三是第27个星期三是的,您应该添加
21
,而不是
28
。是的,21是正确答案。谢谢大家的帮助!!你意想不到的结果是什么?你的问题是你增加了28天来获得第四个星期三,但2014年8月的第四个星期三是第27个星期三是的,大概你应该增加
21
,而不是
28
。是的,21是正确的答案。谢谢大家的帮助!!天哪,我该怎么做,非常感谢。现在它向我展示了正确的dayomg,我怎样才能做到这一点,非常感谢。现在它告诉我正确的日子