簡體   English   中英

如何從年,月,月中的星期幾和星期幾中獲取日期? C#

[英]How to get a date from year, month, week of month and Day of week ? C#

我有月,年,周幾和月中的第幾周,因此我想得到一個日期。 我怎樣才能做到這一點? 以下是我的代碼,但沒有得到正確的結果。

我在這里想念什么?

碼:

internal DateTime? GetDate(int year) // year = 2016
{
    int month;
    DateTime? date;

    switch (Type)
    {
        case "CALCULATED":
            month = FixedMonth; // month = 9
            var firstDayOfWeek = new DateTime(year, month, 1); // firstDayOfWeek = 9/1/2016 12:00:00 AM
            while (RestaurantSchedule.GetOneBasedDayOfWeek(firstDayOfWeek) <= DayOfWeek) // DayOfWeek = Monday
            {
                firstDayOfWeek = firstDayOfWeek.AddDays(1);
            }
            date = firstDayOfWeek.AddDays((WeekOfMonth - 1) * 7); // WeekOfMonth = 1, returns date = 9/1/2016 12:00:00 AM
            if (date.Value.Month > month)
            {
                return date.Value.AddDays(-7);
            }
            return date;
        default:
            return new DateTime?();
    }
}

public static OneBasedDayOfWeek GetOneBasedDayOfWeek(DateTime date) // date = 9/1/2016 12:00:00 AM
{
    // returns Thursday
    return (OneBasedDayOfWeek)Enum.Parse(typeof(OneBasedDayOfWeek), date.DayOfWeek.ToString());
}

// OneBasedDayOfWeek uses following enum        
public enum DayOfWeek
{
    None = 0,
    Sunday = 1,
    Monday = 2,
    Tuesday = 3,
    Wednesday = 4,
    Thursday = 5,
    Friday = 6,
    Saturday = 7 
}

數據庫條目:

HolidayDefinitionId   Type         FixedMonth  FixedDay    DayOfWeek   WeekOfMonth Adjustment  HolidayName     Enabled
--------------------  ------------ ----------- ----------- ----------- ----------- ----------- --------------- -------
LABOR                 CALCULATED   9           0           2           1           0           Labor Day       1
PRESIDENTS            CALCULATED   2           0           2           3           0           President's Day 1

實際結果:

Presidents Day = 02/15/2016
Labor Day = 09/01/2016

預期成績:

Presidents Day = 02/16/2016
Labor Day = 09/05/2016

今年的總統日是2月15日,所以這是正確的。 我的勞動節是這樣工作的:在第一部分中,我不得不假設您想將Microsoft的DateTime(星期日= 0)轉換為您的Sunday = 1枚舉。

    public static DayOfWeek GetOneBasedDayOfWeek(DateTime date) // date = 9/1/2016 12:00:00 AM
    {
        // returns Thursday
        return (DayOfWeek)((int)date.DayOfWeek + 1);
    }

在主函數中,您要迭代直到實際到達星期幾,而不僅僅是減少星期幾(一旦到達星期日,循環將始終停止,因為(int)Sunday < (int)AnyOtherDay

while (GetOneBasedDayOfWeek(firstDayOfWeek) != DayOfWeek)

我用幾年后的日期對它進行了測試,它似乎有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM