提问人:SBRW Dmitriy 提问时间:2/21/2023 更新时间:2/22/2023 访问量:65
在两个日期之间按月计算一周中的天数
Count days of the week by month between two dates
问:
我在项目上遇到了一个问题,其实本质是什么:
有两个日期给出一个范围。在此范围内,您需要查找此范围中包含的月份名称,这已经完成,但您仍然需要查找此范围内每月包含的一周天数(例如,星期一)。
例如:
开始日期 - 01.01.2023
结束日期 - 02/28/202
范围内的月份 - 1 月、2 月
一月的星期一 - 5
二月的星期一 - 4
告诉我,你有什么想法可以做类似的事情吗,或者有人有类似的现成解决方案?
先谢谢你!
我建议有必要对循环和数组中的所有内容进行计数,但是我还不是很擅长它们,所以我需要帮助
答:
这感觉就像家庭作业。我不为别人做作业(当我还是学生的时候,我就受够了)。我确实帮忙。
我忽略了@Dai和他的《Haskell》一书,而是用一个循环来展示如何做到这一点。
首先,考虑简单循环。语句由三个部分组成:for
for
for(initialize; validate; updateAtEndOfLoop)
通常,这会循环访问整数。例如:
for (var i = 0; i < someMaxValue; ++i) {
DoSomethingWith(i);
}
该代码等效于:
{
var i = 0; //initialize
while (i < someMaxValue) { //validate
DoSomethingWith(i);
++i; //updateAtEndOfLoop
}
}
但是,没有说循环必须处理整数,特别是它们可以处理 s。for
DateTime
请考虑以下代码:
var startDate = new DateTime(2023, 1, 22);
var endDate = DateTime.Today;
var increment = TimeSpan.FromDays(1);
这将设置上个月的开始日期和今天的结束日期,以及一个增量值,即 .具体而言,您可以将 a 添加到 中,该添加将产生一个新的 .TimeSpan
TimeSpan
DateTime
DateTime
所以,我可以说:
for (var date = startDate; date <= endDate; date += increment) {
DoSomethingWith(date);
}
另一件值得注意的事情是 s 有一个属性。 是对应于一周中的几天。如果将枚举转换为字符串(使用 ,它将呈现为字符串值的星期几(如)。DateTime
DayOfWeek
DayOfWeek
enum
.ToString
"Sunday"
在我的测试用例中,我将其用作循环的主体:
Debug.WriteLine($"{date.Year}-{date.Month}-{date.Day}: {date.DayOfWeek} ({(int)date.DayOfWeek})");
这导致它显示在 Visual Studio 的窗格中:Output
2023-1-22: Sunday (0)
2023-1-23: Monday (1)
2023-1-24: Tuesday (2)
2023-1-25: Wednesday (3)
2023-1-26: Thursday (4)
2023-1-27: Friday (5)
2023-1-28: Saturday (6)
2023-1-29: Sunday (0)
2023-1-30: Monday (1)
2023-1-31: Tuesday (2)
2023-2-1: Wednesday (3)
2023-2-2: Thursday (4)
2023-2-3: Friday (5)
2023-2-4: Saturday (6)
2023-2-5: Sunday (0)
2023-2-6: Monday (1)
2023-2-7: Tuesday (2)
2023-2-8: Wednesday (3)
2023-2-9: Thursday (4)
2023-2-10: Friday (5)
2023-2-11: Saturday (6)
2023-2-12: Sunday (0)
2023-2-13: Monday (1)
2023-2-14: Tuesday (2)
2023-2-15: Wednesday (3)
2023-2-16: Thursday (4)
2023-2-17: Friday (5)
2023-2-18: Saturday (6)
2023-2-19: Sunday (0)
2023-2-20: Monday (1)
2023-2-21: Tuesday (2)
这应该足以解决您的问题。
评论