看起来语言为给定日期提供日期/日期方法。如果有人感兴趣,您可以阅读Zeller 的一致性。
我不认为这是他们想要你做的,但你可以从中找到一个月的第一天的星期几。现在我考虑了一下,您可以找到给定日期的星期几N
并得到模 7。
哦等等,是一周中的第 N 天(如星期天)还是一个月中的第 N 个工作日!好的,我看到了例子。
如果您可以构造一个日期,例如一个月的 1 日,也许会有所不同。
鉴于这是一周中某一天的第 N 次出现,并且您不能摆弄任何日期时间数据类型,并且您可以访问获取星期几和获取月份日期功能。星期天会是零吗?
1) 首先,星期几必须与给定的星期几匹配。
2) N 必须至少为 1 且最多为 4。
3) 对于相同的 n,一个月中的日期范围在 n*7*dayOfWeek + 1 和 n*7*dayOfWeek + 6 之间。
- 让我考虑一下。如果星期日是第一个.. 0*7*0+1 = 1,星期六第 6 个将是 0*7*0+6。
认为上面的 1 和 3 就足够了,因为 get day of month 函数不应该违反 2。
(* first try, this code sucks *)
function isNthGivenDayInMonth(date : dateTime;
dow : dayOfWeek;
N : integer) : boolean;
var B, A : integer (* on or before and after day of month *)
var Day : integer (* day of month *)
begin
B := (N-1)*7 + 1; A := (N-1)*7 + 6;
D := getDayOfMonth(date);
if (dow <> getDayOfWeek(date)
then return(false)
else return( (B <= Day) and (A >= Day) );
end; (* function *)
希望这个大声笑没有错误!
[编辑:星期六将是第 7 天,上限在上面(N-1)*7 + 7
。]
您的解决方案看起来会匹配 2 个不同的星期?看起来周日它总是会返回零?应该在 C# 中完成伪代码.. 短路 && 就像我的 if.. 嘿不应该是周日开始的几个月内 N = 1 的第一场比赛?
d/ 7 == n
那会导致(either 0 or 1)/7 == 1
,那是不对的!你||
的(n-1)
也有,罗伯特也有。跟着罗伯特瓦格纳的回答走!就2行,短就好!拥有(Day-1) mod 7
[edit: (Day-1) div 7
]
消除了我不必要的变量和 2 行设置。
作为记录,这应该检查边界情况等等,例如如果 8 月 31 日是星期日或星期六。
[编辑:也应该检查周末案例。对不起!]