如果我有日期,该如何计算该年中该日期的星期数?
例如,在2008年,第1周是1月1日至1月6日,第2周是1月7日至13日,因此,如果我的日期是2008年1月10日,那么我的周数将是2。
一种算法非常适合入门,示例代码也将有所帮助-我正在Windows上使用C ++进行开发。
伪代码:
int julian = getDayOfYear(myDate) // Jan 1 = 1, Jan 2 = 2, etc... int dow = getDayOfWeek(myDate) // Sun = 0, Mon = 1, etc... int dowJan1 = getDayOfWeek("1/1/" + thisYear) // find out first of year's day // int badWeekNum = (julian / 7) + 1 // Get our week# (wrong! Don't use this) int weekNum = ((julian + 6) / 7) // probably better. CHECK THIS LINE. (See comments.) if (dow < dowJan1) // adjust for being after Saturday of week #1 ++weekNum; return (weekNum)
为了明确起见,此算法假定您按如下方式计算周数:
S M T W R F S 1 2 3 <-- week #1 4 5 6 7 8 9 10 <-- week #2 [etc.]
getDayOfWeek()和getDayOfYear()是大多数语言中的标准日期对象操作。如果您没有它们,可以在查明星期几后,从某个已知的日期算起(1970年1月1日是常见的日期)。
如果要实现自己的日期计数例程,请记住,可以被100整除的年份 不是 leap年,除非它们也可以被400整除。因此1900不是a年,而2000是was年。如果您要回到较早的时间工作,则必须弄乱公历日历和朱利安日历等,请参阅Wikipedia以获得大量信息。
该链接更详细地讨论了Windows / C ++中的日期/时间功能。