我如何将Calendar.GetWeekOfYear返回的星期反转回DateTime?问题是似乎没有内置的方法可以从先前计算的“周数”中获取DateTime。我想做的基本上是让这项工作适用于所有时间和所有文化日历。DateTimedt1=newDateTime.Now;intweek=cal.GetWeekOfYear(dt);DateTimedt2=GetDateTimeFromYearAndWeek(dt.Year,week);if(dt1dt2.AddDays(7.0)){thrownewException("newdatetimelimitsdonotspanexistingdatetime;}我认为问题之一是对于某些文化,cal.GetWeekOfYear(dt)调用将返回正确的与dt.Year不同的年份的周数。这意味着您不能在使用它时调用我虚构的GetDateTimeFromYearAndWeek调用。我自己的答案有三个。首先,我想出了一个Calendar.GetWeekOfYear的包装器,它返回“年"当前周的日期,因为年份可能与DateTime对象的年份不同。publicstaticvoidGetWeek(DateTimedt,CultureInfoci,outintweek,outintyear){year=dt.Year;week=ci.Calendar.GetWeekOfYear(dt,ci.DateTimeFormat.CalendarWeekRule,ci.DateTimeFormat.FirstDayOfWeek);intprevweek=ci.Calendar.GetWeekOfYear(dt.AddDays(-7.0),ci.DateTimeFormat.CalendarWeekRule,ci.DateTimeFormat.FirstDayOfWeek);if(prevweek+1==week){//prevweek的年份应该是正确的year=dt.AddDays(-7.0).Year;}else{//留在这里year=dt.Year;接下来,这是答案的核心。这会将year和weekOfYear反转为DateTime对象。请注意,我使用了年份,因为这似乎避免了新年奇点的问题(其中52或53可能围绕也可能不围绕1)。我还通过查找确实是一周第一天的日期来同步日期,避免了比较两个DayOfWeek值的负偏移问题。publicstaticDateTimeFirstDateOfWeek(intyear,intweekOfYear,CultureInfoci){DateTimejul1=newDateTime(year,7,1);while(jul1.DayOfWeek!=ci.DateTimeFormat.FirstDayOfWeek){jul1=jul1.AddDays(1.0);}intrefWeek=ci.Calendar.GetWeekOfYear(jul1,ci.DateTimeFormat.CalendarWeekRule,ci.DateTimeFormat.FirstDayOfWeek);intweekOffset=weekOfYear-refWeek;返回jul1.AddDays(7*weekOffset);}最后,对于所有怀疑它的人,这是我的单元测试,循环遍历大量日期和文化以确保它适用于所有这些。以上是C#学习教程:HowcanIreversetheweekreturnedfromCalendar.GetWeekOfYearbacktoDateTime?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——publicstaticvoidTestDates(){foreach(CultureInfociinCultureInfo.GetCultures(CultureTypes.AllCultures).Where((x)=>!x.IsNeutralCulture&&x.Calendar.AlgorithmType==CalendarAlgorithmType.SolarCalendar)){for(intyear=2010;yearweek->datefor(inthour=0;hourdt2){控制台.WriteLine("{3}Baddate{0}notbetween{1}and{2}",dt,dt1,dt2,ci.Name);}}//接下来尝试今年的几个星期//转换fromweek->date->weekfor(intweek=1;week本文采集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
