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

如何按周对日期进行分组?分享

时间:2023-04-10 18:03:57 C#

如何按周对日期进行分组?我正在为我正在创建的自定义应用程序编写一个Excel导出器,我对C#中的LINQ分组有疑问。基本上,这个新的Excel导出器类有两个日期。然后该类检索该日期范围内的所有装运。作为该导出器的一部分,我需要能够将日期分组为数周,并获取该周的值。因此,例如,如果给我07/12/2011和2011年12月22日(dd/MM/yyyy格式),我需要将它们之间的所有发货分组为数周(每周从星期日开始)。使用上述日期的理想结果是第1周:(04/12/2011和10/12/2011之间的货物)第2周:(11/12/2011和17/12/2011之间的货物)第3周:(货物在18/11/2011和24/12/2011之间)有什么想法吗?这里的基本问题是如何将DateTime实例投影到一年中的一周值。这可以通过调用Calendar.GetWeekOfYear来完成。所以定义投影:FuncweekProjector=d=>CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(d,CalendarWeekRule.FirstFourDayWeek,DayOfWeek.Sunday);您可以通过调整方法调用中的参数来准确配置“周数”的确定方式。您还可以决定将投影定义为例如如果需要,可以使用扩展方法;这不会改变代码的本质。无论如何,您可以按周分组:varconsignmentsByWeek=fromconinconsignmentsgroupconbyweekProjector(con.Date);如果您还想将输出限制为两个特定日期之间的货物,只需添加适当的where子句;分组逻辑没有改变。犹豫,虽然我不同意作为一个受人尊敬的回答者,但我认为这里接受的答案是错误的,而且这不是一个基本上预计到一周价值的问题。GetWeekOfYear()的一般概念是根据一些商定的标准将索引值分配给一年中的几周。将日期分成七个相邻的日子是不合适的,因为我认为提问者需要它。GetWeekOfYear()不仅会被用作年底少于7天的组的建议结果,更糟糕的是,GetWeekOfYear()支持的各种标准通常会将一年的第一天分配给最后一天前一周的,但GetWeekOfYear()结果仅包含整数周索引,没有参考相关年份,按照新的{Year=date.Year,weekProjector(date)}或date.Year+"-"+weekProjector(date)askeryeardate.Year+"-"+weekProjector(date)将2011年1月1日从圣诞节到除夕的12个月分组。所以我觉得原题基本不是预测周值,而是预测一周的所有时间值,“你可能会说,一周从y/m/d开始”,所以分组只需要在一周的第一天,即(假设你很高兴默认为星期日),简单地说:groupbydate.AddDays(-(int)date.DayOfWeek)除了Jon的回答之外,您还可以获取一周第一天的日期,然后按该日期分组。获取一周第一天的日期。您可以使用此代码:if(diffthenyoucangroupbythefirstweeklikethis:above是C#学习教程:Howtogroupdatesbyweek?分享的所有内容,如果对大家有用还需要详细了解C#学习教程,希望大家多多关注---varconsignmentsByWeek=fromconinconsignmentsgroupconbycon.Datedate.StartOfWeek(DayOfWeek.Monday);本文整理自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如有转载请注明出处: