2013-07-18 72 views
1

我是一個小應用程序,返回的週數甚至不是。如何檢查ANSI C中的星期數是偶數還是奇數?

time_t now = time(0); 
tm *ltm = localtime(&now); 
int twin=(ltm->tm_yday/7)%2 

但獨立於一年中的第一天,因此返回

週一,週四,我們等
0,1,1,1,1,1,1
在未來本週
1,0,0,0,0,0,0

在明年
週一,週四,我們等
0,0,1,1,1,1,1
在下週
1,1,0,0,0,0,0

等.. Twin-如果數模2 = 0
所以我要補充轉變來改變在每個週日的週數或星期一。有什麼建議麼?

+0

請澄清究竟你試圖完成。它一點都不清楚。 – StoryTeller

+0

你稱之爲「雙胞胎」通常被稱爲「奇怪」。一週中的星期幾(即星期一,星期三,星期三等)不會稍微回答答案:您應該檢查1月1日,1月2日,1月3日......等等。 – dasblinkenlight

回答

1

第一週我們假定你是有正好爲7天,這是不正確。

例如2013年1月1日是星期二,所以在第一週只有5天之久。

如何使用的strftime?喜歡的東西:

time_t now = time(0); 
tm *ltm = localtime(&now); 
char weekNr[3]; 
strftime(weekNr, sizeof(weekNr), "%W", ltm); 
int isOdd = atoi(weeknr) % 2; 
+0

不錯的訣竅,另請參閱'%V'和'%U'。 – rodrigo

+0

Thx,最簡單的方法是最好的 – user2389307

0

你叫什麼,在英語中通常被稱爲甚至

關於你的問題,這裏的問題是,你不能正確計算週數:你只需7分,這是不夠的,因爲一年的開始和周開始,每年有所不同。

此外,有幾種不同的方式來決定哪一個是1星期見例如this code,上手。

UPDATE:從eglibc源代碼無恥複製:

1)當前年的週數爲十進制數,範圍從00到53,從第一個開始星期日爲一週的第一天01(strftime("%U")):

tp->tm_yday - tp->tm_wday + 7)/7 

2)本年度的週數爲十進制數,範圍從00到53,開始的第一個星期一爲01周的第一天(strftime("%W")):

(tp->tm_yday - (tp->tm_wday - 1 + 7) % 7 + 7)/7 

3)ISO 8601的週數(參見本年度的NOTES)爲十進制數,範圍從01到53,其中周1是具有在新的一年至少4天的第一週(strftime("%V")) :

好吧,這很複雜......所以你最好用@MaikuMori的想法使用strftime``, but with「%V」, and then parse the result, with atoi()`。

+0

謝謝,例如,現在我可以看到它。 – user2389307

相關問題