[英]C# - Get the first day and last day of the week knowing the week number, month number and year
[英]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.