使用c#通过一周中的一天、一周中一周、一年中一个月和一年中的一个月来获取日期

本文关键字:一周 一年 一个 取日期 获取 一天 使用 | 更新日期: 2023-09-27 18:20:34

我需要一个方法,它可以在接受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);
        }

使用c#通过一周中的一天、一周中一周、一年中一个月和一年中的一个月来获取日期

您可以这样做-对于您选择的工作日,以及该工作日的第一次或以后发生的情况:

// 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;