Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用c通过传递dayofweek、weekofmonth、monthofyear和year来获取日期_C# - Fatal编程技术网

C# 使用c通过传递dayofweek、weekofmonth、monthofyear和year来获取日期

C# 使用c通过传递dayofweek、weekofmonth、monthofyear和year来获取日期,c#,C#,我需要一个方法,可以返回一个日期后,采取4个输入,周,周,月,月和年。我尝试了以下方法,但失败了,因为这个月的第4周没有所有的天数,所以我返回28天,以确保安全。我希望有一个完整的解决方案,如果可能的话,比这更好。请忽略我的参数,我知道我可以通过传递日期来改进它。这是我的密码 public static DateTime GetDateByDayOfWeekOfMonthOfYear(int dayOfWeek, int weekOfMonth, int monthOfYear, int yea

我需要一个方法,可以返回一个日期后,采取4个输入,周,周,月,月和年。我尝试了以下方法,但失败了,因为这个月的第4周没有所有的天数,所以我返回28天,以确保安全。我希望有一个完整的解决方案,如果可能的话,比这更好。请忽略我的参数,我知道我可以通过传递日期来改进它。这是我的密码

public static DateTime GetDateByDayOfWeekOfMonthOfYear(int dayOfWeek, int weekOfMonth, int monthOfYear, int year)
        {
            var firstDayOfMonth = new DateTime(year, monthOfYear, 1);
            var firstDay = (int)firstDayOfMonth.DayOfWeek;
            var addor = 0;
            if (firstDay == (int)DayOfWeek.Monday)
                addor = 0;
            if (firstDay == (int)DayOfWeek.Tuesday)
                addor = 6;
            if (firstDay == (int)DayOfWeek.Wednesday)
                addor = 5;
            if (firstDay == (int)DayOfWeek.Thursday)
                addor = 4;
            if (firstDay == (int)DayOfWeek.Friday)
                addor = 3;
            if (firstDay == (int)DayOfWeek.Saturday)
                addor = 2;
            if (firstDay == (int)DayOfWeek.Sunday)
                addor = 1;
            var resultantDate = firstDayOfMonth.AddDays((7 * weekOfMonth + addor) - (7 - dayOfWeek) - 1);

             return resultantDate.Month == monthOfYear
            ? resultantDate
            : firstDayOfMonth.AddDays(27);
        }

您可以这样做-对于您选择的工作日,以及此工作日的第一次或以后的事件:

// Select year, month, weekday, and occurrence of weekday.
int year = 2015;
int month = 10;
DayOfWeek dayOfWeek = DayOfWeek.Monday;
int occurrence = 1;  // Valid values: 1 to 5.

// Constants.
const int daysInWeek = 7;
const int maximumWeek = 5;
const int minimumWeek = 1;

occurrence = occurrence < minimumWeek ? minimumWeek : occurrence;
occurrence = occurrence > maximumWeek ? maximumWeek : occurrence;

DateTime first = new DateTime(year, month, 1);
int primoOffset = (dayOfWeek - first.DayOfWeek  + daysInWeek) % daysInWeek;
DateTime dayInMonth = first.AddDays(primoOffset + daysInWeek * --occurrence);
if (dayInMonth.Month != month)
{
    // Week 5 belongs to the next month.
    // Return value for the last occurrence.
    dayInMonth = dayInMonth.AddDays(-daysInWeek);
}

return dayInMonth;

您可以使用DateTime.DaysInMonthInt32, Int32检查给定年份中给定月份的天数。如何定义weekofmonth?@qxg weekofmonth可以是1到4之间的任意数字。哪一天是一周的第一天?星期一还是星期天?你认为2015-111-30是第五周吗?2015年12月第一周的哪个日期,2001年12月还是2008年12月?..@Learner…有些月份,如2016年1月,有六周。。。。