【发布时间】:2018-07-15 22:16:39
【问题描述】:
我有点困惑如何检查给定的日期是否是一个月内出现第五次的日期。例如,以下是一个月内出现 5 次的一周中的某些日子:
Thursday 29th March 2018Friday 30th March 2018Saturday 31st March 2018Saturday 29th April 2018
如果给定的日期是一个月的第五周,我想要一个返回 true 或 false 的方法。
我已经尝试了this question 中的以下代码,但此方法仅返回开始第五周周期的第一个日期。
public DateTime? FifthDay(DayOfWeek dayOfWeek, byte monthNum, int year)
{
var searchDate = new DateTime(year, monthNum, 1);
var weekDay = searchDate.DayOfWeek;
if (weekDay == dayOfWeek)
{
searchDate = searchDate.AddDays(28);
}
for (DateTime d = searchDate; d < d.AddDays(7); d = d.AddDays(1))
{
if (d.DayOfWeek == dayOfWeek)
{
searchDate = searchDate.AddDays(28);
break;
}
}
if (searchDate.Month == monthNum)
return searchDate;
return null;
}
谢谢
【问题讨论】:
-
你现在处理日期、时区和国际化的时代。美国人和英国人甚至无法在一周开始的天达成一致,这使整个问题变得一团糟。我唯一的建议?大多数与日期相关的函数都使用当前的 Windows 格式选择。其中可能包括该数据。除了那个理想的情况,我永远不会触及这些主题:youtube.com/watch?v=-5wpm-gesOYyoutube.com/watch?v=0j74jcxSunY
-
我可能会尝试从您链接的问题中获得赞成、接受的答案中的代码?如果您不熟悉 linq,但回答有效,您可能会请求帮助使用循环编写该代码。
-
@Christopher 一周的哪一天开始并不重要。 OP 只想知道一周中的某一天是否在同一个月内出现 5 次。
-
@Christopher 这是一个月中的几天,而不是一周。如果日期部分是 29、30 或 31,则它是该天的第五次出现(除非有一些日历一周中有超过或少于 7 天)