C ++で日番号から日付を計算するにはどうすればよいですか? コード全体を書く必要はありません。月と日を計算する数学がわかりません。
例:
input: 1
output: 01/01/2012
input: 10
output: 01/10/2012
input: 365
output: 12/31/2012
常に現在の年を使用し、365 を超えた場合は 0 を返します。うるう年の検出は必要ありません。
C ++で日番号から日付を計算するにはどうすればよいですか? コード全体を書く必要はありません。月と日を計算する数学がわかりません。
例:
input: 1
output: 01/01/2012
input: 10
output: 01/10/2012
input: 365
output: 12/31/2012
常に現在の年を使用し、365 を超えた場合は 0 を返します。うるう年の検出は必要ありません。
日付計算ライブラリを使用します。たとえば、これを実現する優れたBoost Date_Timeライブラリなどです。
using namespace boost::gregorian;
date d(2012,Jan,1); // or one of the other constructors
date d2 = d + days(365); // or your other offsets
1年に365日を想定した、プログラムからの単純なスニペット:
int input, day, month = 0, months[13] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
while (input > 365) {
// Parse the input to be less than or equal to 365
input -= 365;
}
while (months[month] < input) {
// Figure out the correct month.
month++;
}
// Get the day thanks to the months array
day = input - months[month - 1];
標準ライブラリを使えばそれほど難しくありません。C プログラマーのように C++ コードを書いていたらすみません (C++<ctime>
には再入可能gmtime
関数がありません)。
#include <time.h>
#include <cstdio>
int main(int argc, char *argv[])
{
tm t;
int daynum = 10;
time_t now = time(NULL);
gmtime_r(&now, &t);
t.tm_sec = 0;
t.tm_min = 0;
t.tm_hour = 0;
t.tm_mday = 1;
t.tm_mon = 1;
time_t ref = mktime(&t);
time_t day = ref + (daynum - 1) * 86400;
gmtime_r(&day, &t);
std::printf("%02d/%02d/%04d\n", t.tm_mon, t.tm_mday, 1900 + t.tm_year);
return 0;
}
申し訳ありませんが、うるう年の検出なしでこれを行う適切な方法がわかりません。