1

私は戻ってくる小さなアプリを持っています 週でもそうでなくても.

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- if number modulo 2 = 0
したがって、週を変更するにはシフトを追加する必要があります毎週日曜日または月曜日の数。助言がありますか?

4

2 に答える 2

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;
于 2013-07-18T10:00:55.177 に答える
0

英語でTwinと呼ぶものは、通常evenと呼ばれます。

あなたの質問について、ここでの問題は、週番号を正しく計算していないことです。単純に 7 で割っています。年の始まりと週の始まりは毎年異なるため、それだけでは十分ではありません。

さらに、どれを第 1 週にするかを決定する方法はいくつかあります。たとえば、このコードを参照して開始してください。

更新: eglibc ソース コードから恥知らずにコピー:

1) 01 週の最初の日として最初の日曜日から始まる、00 から 53 の範囲の 10 進数としての今年の週番号 ( strftime("%U")):

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

2) 01 週の最初の日として最初の月曜日から始まる、00 から 53 の範囲の 10 進数としての今年の週番号 ( strftime("%W")):

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

3) 01 から 53 の範囲の 10 進数としての、現在の年の ISO 8601 週番号 (注を参照)。ここで、週 1 は、新年に少なくとも 4 日が含まれる最初の週です ( strftime("%V")):

うーん、これは複雑です... strftime``, but with"%V" , and then parse the result, withatoi()` を使用する @MaikuMori のアイデアの方が適切です。

于 2013-07-18T10:02:40.587 に答える