Unix 環境 (Linux、BSD など)からの、または互換性のある time_t 値を取得した場合gettimeofday()
、月内の対応する週番号を教えてくれるコンパクトなアルゴリズムはありますか?
理想的には、戻り値は の動作と同様に機能しますが%W
、strftime()
年内の週ではなく月内の週を指定する点が異なります。
Javaには、W
私が求めていることと多かれ少なかれ似たようなフォーマットトークンがあると思います。
[回答の後に書かれた以下のすべては、David Nehme、Branan、および Sparr によって投稿されました。]
%W
この結果を と同様の方法で返すには、これまでにその月に発生した月曜日の数をカウントする必要があることに気付きました。その数値がゼロの場合、0 が返されます。
特に David Nehme と Branan には、物事を正しい軌道に乗せるためのソリューションを提供してくれたことに感謝します。[Branan の変数名を使用して] を返すコードのビットは((ts->mday - 1) / 7)
、現在の日付より前に発生した完全な週数を示します。
ただし、これまでに発生した月曜日の数を数えている場合は、今日を含む整数の週数を数えたいと考え、残りの端数週にも月曜日が含まれているかどうかを検討します。
週全体を取り出した後に残った端数週に月曜日が含まれているかどうかを判断するには、それを考慮ts->mday % 7
して曜日と比較する必要がありts->wday
ます。これは、組み合わせを書き出すと簡単にわかりますが、その日が日曜日でないことを確認した場合 ( wday > 0
)、ts->wday <= (ts->mday % 7)
月曜日のカウントを常に 1 ずつ増やす必要があります。月、および最初の端数週内の現在の曜日に基づいて、端数週に月曜日が含まれるかどうか。
したがって、Branan の return ステートメントを次のように書き直します。
return (ts->tm_mday / 7) + ((ts->tm_wday > 0) && (ts->tm_wday <= (ts->tm_mday % 7)));