3 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
偽代碼:
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)
為了明確起見(jiàn),此算法假定您按如下方式計(jì)算周數(shù):
S M T W R F S
1 2 3 <-- week #1
4 5 6 7 8 9 10 <-- week #2
[etc.]
getDayOfWeek()和getDayOfYear()是大多數(shù)語(yǔ)言中的標(biāo)準(zhǔn)日期對(duì)象操作。如果您沒(méi)有它們,可以在查明星期幾之后,從某個(gè)已知的日期算起(1970年1月1日是常見(jiàn)的日期)。
如果要實(shí)現(xiàn)自己的日期計(jì)數(shù)例程,請(qǐng)記住,可以被100整除的年份不是 leap年,除非它們也可以被400整除。因此1900不是year年,而2000是leap年。如果您要回到較早的時(shí)間工作,則必須弄亂公歷日歷和朱利安日歷等,請(qǐng)參閱Wikipedia上的大量信息。
該鏈接更詳細(xì)地討論了Windows / C ++中的日期/時(shí)間功能。
添加回答
舉報(bào)