当前位置: 首页 > 编程语言 > C#

如何计算-查找给定日期的周数?Share

时间:2023-04-10 20:01:17 C#

如何计算/查找给定日期的周数?如何计算/查找给定日期的周数?varcurrentCulture=CultureInfo.CurrentCulture;varweekNo=currentCulture.Calendar.GetWeekOfYear(newDateTime(2013,12,31),currentCulture.DateTimeFormat.CalendarWeekRule,currentCulture.DateTimeFormat.FirstDayOfWeek);请注意,这不符合ISO801在瑞典,我们使用ISO8601周数,但即使文化设置为“sv-SE”,CalendarWeekRule为FirstFourDayWeek和FirstDayOfWeek为星期一,周变量将设置为53而不是正确的1在上面的代码中。我只在瑞典设置中尝试过,但我很确定所有使用ISO8601周数的国家(奥地利、德国、瑞士等)都会受到此问题的影响。PetervanOoijen和ShawnSteele对这个问题有不同的解决方案。这是一个紧张的解决方案privatestaticintWeekOfYearISO8601(DateTimedate){varday=(int)CultureInfo.CurrentCulture.Calendar.GetDayOfWeek(date);返回CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date.AddDays(4-(day==0?7:day)),CalendarWeekRule.FirstFourDayWeek,DayOfWeek.Monday);}它已经过以下测试vardatesAndISO8601Weeks=newDictionary{{newDateTime(2000,12,31),52},{newDateTime(2001,1,1),1},{newDateTime(2005,1,1),53},{newDateTime(2007,12,31),1},{newDateTime(2008,12,29),1},{newDateTime(2010,1,3),53},{newDateTime(2011,12,31),52},{newDateTime(2012,1,1),52},{newDateTime(2013,1,2),1},{newDateTime(2013,12,31),1},};foreach(vardateWeekindatesAndISO8601Weeks){Debug.Assert(WeekOfYearISO8601(dateWeek.Key)==dateWeek.Value,dateWeek.Key.ToShortDateString()+"应该是周数"+dateWeek.Value+"但是是"+WeekOfYearISO8601(dateWeek.Key));}publicstaticintGetWeekNumber(DateTimedtPassed){CultureInfociCurr=CultureInfo.CurrentCulture;intweekNum=ciCurr.Calendar.GetWeekOfYear(dtPassed,CalendarWeekRule.FirstFourDayWeek,DayOfWeek.Monday);返回周数;在MSDN上查看GetWeekOfYear有这个例子:usingSystem;使用System.Globalization;publicclassSamplesCalendar{publicstaticvoidMain(){//获取与CultureInfo关联的日历实例。CultureInfomyCI=newCultureInfo("en-US");日历myCal=myCI.Calendar;//获取GetWeekOfYear所需的DTFI属性。CalendarWeekRulemyCWR=myCI.DateTimeFormat.CalendarWeekRule;DayOfWeekmyFirstDOW=myCI.DateTimeFormat.FirstDayOfWeek;//显示相对于年初的当前周数。Console.WriteLine("用于en-US文化的CalendarWeekRule是{0}。",myCWR);Console.WriteLine("用于en-US文化的FirstDayOfWeek是{0}。",myFirstDOW);Console.WriteLine("因此,当前周是第{0}周currentyear.",myCal.GetWeekOfYear(DateTime.Now,myCWR,myFirstDOW));//显示当年总周数DateTimeLastDay=newSystem.DateTime(DateTime.Now.Year,12,31);Console.WriteLine("今年有{0}周({1})。",myCal.GetWeekOfYear(LastDay,myCWR,myFirstDOW),LastDay.Year);}}My.Computer.Info.InstalledUICulture.DateTimeFormat.Calendar.GetWeekOfYear(yourDateHere,CalendarWeekRule.FirstDay,My.Computer.Info.InstalledUICulture.DateTimeFormat.FirstDayOfWeek)像这样的东西......我知道这已经晚了,但因为它出现在我的搜索中,我想我会抛出这里的一个不同的解决方案是c#解决方案。(int)(Math.Ceiling((decimal)startDate.Day/7))+(((newDateTime(startDate.Year,startDate.Month,1).DayOfWeek)>startDate。DayOfWeek)?1:0);如果你想要ISO8601周数,其中周从星期一开始,所有周都有7天,第一周是包含一年中第一个星期四的一周,这可能是一个解决方案。因为似乎没有产生正确的ISO-8601周数的.Net文化,我将完全绕过内置的周确定并手动进行计算,而不是尝试更正部分正确的结果。我最终得到的是以下扩展方法:publicstaticintGetIso8601WeekNumber(thisDateTimedate){varthursday=date.AddDays(3-((int)date.DayOfWeek+6)%7);返回1+(星期四.DayOfYear-1)/7;首先,((int)date.DayOfWeek+6)%7)确定工作日的数量,0=星期一,6=星期日。date.AddDays(-((int)date.DayOfWeek+6)%7)确定所请求周数之前的星期一的日期。三天后是星期四的目标,它决定了这一周是哪一年。如果将一年中的(从零开始的)天数除以7(向下舍入),您将得到一年中的(从零开始的)周数。在c#中,整数计算结果隐式四舍五入。varcultureInfo=CultureInfo.CurrentCulture;varcalendar=cultureInfo.Calendar;varcalendarWeekRule=cultureInfo.DateTimeFormat.CalendarWeekRule;varfirstDayOfWeek=cultureInfo.DateTimeFormat.FirstDayOfWeek;varlastDayOfWeek=cultureInfo.LCID==1033//英文?DayOfWeek.Saturday:DayOfWeek.Sunday;varlastDayOfYear=newDateTime(date.Year,12,31);//检查这是否是一年中的最后一周并且它不占据整周varweekNumber=calendar.GetWeekOfYear(date,calendarWeekRule,firstDayOfWeek);返回weekNumber==53&&lastDayOfYear.DayOfWeek!=lastDayOfWeek?1:周数;它适用于美国和俄罗斯文化。ISO8601也是正确的,因为俄罗斯周从星期一开始。以上是C#学习教程:Howtocalculate/findtheweeknumberofagivendate?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: