如何计算2个日期的周数?我有两个DateTime变量,我需要计算它们之间的周数。最快(也是最正确)的方法是什么?使用TimeSpan:双周=(date1-date2).TotalDays/7;你可以试试这个:DateTimed1=newDateTime(2006,10,1);DateTimed2=newDateTime(2007,10,15);时间跨度tt=d2-d1;inttotalWeeks=tt.Days/7;如果你想要分数的确切差异,那么而不是:inttotalWeeks=tt.Days/7;使用:doubletotalWeeks=tt.TotalDays/7;更新:试试试试这个库:http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET作者已经找到了解决所有这些细节的方法。我没有看到真正定义一周是什么的答案。这里有一个要点,并不是所有的星期都是平等的。有的算星期一,有的算星期四。以这个月为例。如果我想计算2012年8月的周数,我可以执行以下操作:vardate1=newDateTime(2012,8,1);vardate2=newDateTime(2012,8,31);varweeks=(date1-date2).TotalDays/7;首先,.TotalDays给了我们一个双倍的周数==4.2857...我们可以环绕,但有时您会多算。其他时候你会失败。计算周数通常依赖于定义一周开始和结束的时间。使用DateTime对象,我们发现每周从星期一开始。广泛使用的ISO8601标准定义了从星期四开始的一周。所以两个日期之间的周数取决于星期四出现的次数。使用GregorianCalendar类实现类似的功能:usingSystem;使用System.Globalization;使用FluentAssertions;使用NUnit.Framework;//...命名空间、测试夹具类等...[测试]publicvoidGetMetricsTimesBetween_ReturnsCorrectRange(){DateTimestartDate=newDateTime(2012,8,1);DateTimeendDate=newDateTime(2012,8,31);varcal=newGregorianCalendar();intstartWeekNumber=cal.GetWeekOfYear(startDate,CalendarWeekRule.FirstDay,DayOfWeek.Thursday);intendWeekNumber=cal.GetWeekOfYear(endDate,CalendarWeekRule.FirstDay,DayOfWeek.Thursday);intnumberOfWeeksInRange=endWeekNumber-startWeekNumber;numberOfWeeksInRange.Should().Be(5);这应该会给你更可靠的结果。您必须考虑假设我们在同一年计算周数的示例。通过一些额外的工作,您可以帮助计算处理跨越不同年份的日期范围:[测试]publicvoidGetCountOfWeeks(){varstartDate=newDateTime(2012,12,1);//这里是4周varendDate=newDateTime(2014,1,10);//2013年52周,2014年2周intnumberOfWeeksInRange=0;varcal=newGregorianCalendar();for(intyear=startDate.Year;year这仍然不完美,但更接近了……这里的重点是,如果你想得到像“周”这样的东西的真实计数,它并不像我们倾向于的那么简单是的,它实际上更像是一个地区特定的决定,而不是像1+1这样的标准科学表达2。总天数除以7就像所谓的“工作日”是9到5一样模棱两可。.这是一个更好的例子。当然,重构仍然可以使用,但作为GregorianCalendar类的扩展,处理同一年内和跨年的日期范围://////返回两个日期时间之间的周数/////////////publicstaticintGetWeeks(thisGregorianCalendarcal,CalendarWeekRuleweekRule,DayOfWeekdayofWeek,DateTimestartDate,DateTimeendDate){intstartWeekNumber=0;int结束周数=0;intnumberOfWeeksInRange=0;年){开始周数=0;结束周数=0;startWeekNumber=cal.GetWeekOfYear(startDate,weekRule,dayofWeek);endWeekNumber=cal.GetWeekOfYear(endDate,weekRule,dayofWeek);numberOfWeeksInRange=endWeekNumber-startWeekNumber;}else{//每年计算,包括for(intyear=startDate.Year;year(dtTo-dtFrom).TotalDays/7将给出周publicstaticintNumberOfWeeks(DateTimedateFrom,DateTimedateTo){TimeSpanSpan=dateTo.Subtract(dateFrom);如果(Span.DaysdateTo.DayOfWeek){return2;}return1;}intDays=Span.Days-7+(int)date来自.DayOfWeek;int周数=1;int日计数=0;对于(WeekCount=1;DayCount你可以尝试类似的东西:vard1=newDateTime(2011,01,05);vard2=newDateTime(2010,01,05);Console.WriteLine((d1-d2).Days/7);您可能需要根据您的具体要求将结果向上或向下舍入,但这应该可以解决问题。如果您尝试将除法转换为整数,它将不起作用。您必须除以双以上就是C#学习教程:如何计算2个日期的周数?分享的全部内容,如果对大家有用,需要进一步了解C#学习教程,希望大家喜欢关注——-DateTimestartDateTime=newDateTime(2010,8,1);DateTimeendDateTime=newDateTime(2010,8,28);doubleweeks=(endDateTime-startDateTime).TotalDays/7;本文收集自网络,不代表Stand,如涉及侵权,请点击维权联系管理员删除,如需转载请注明出处:
