3 つの変数に現在の年、月、日を入力する簡単な関数を作成しました。しかし、何らかの理由で正しく動作しておらず、問題が見つからないようです。
void getDate(int *year, int *month, int *date)
{
int epochTime,
monthLength,
functionYear,
functionMonth,
functionDate;
functionYear = 1970;
functionMonth = 1;
functionDate = 1;
epochTime = time(NULL);
while (epochTime > 1 * 365 * 24 * 60 * 60)
{
epochTime -= 1 * 365 * 24 * 60 * 60;
functionYear++;
}
monthLength = findMonthLength(functionYear, functionMonth, false);
while (epochTime > 1 * monthLength * 24 * 60 * 60)
{
printf("%d\n", epochTime);
epochTime -= 1 * monthLength * 24 * 60 * 60;
functionMonth++;
monthLength = findMonthLength(functionYear, functionMonth, false);
printf("functionMonth = %d\n", functionMonth);
}
while (epochTime > 1 * 24 * 60 * 60)
{
printf("%d\n", epochTime);
epochTime -= 1 * 24 * 60 * 60;
functionDate++;
printf("functionDate = %d\n", functionDate);
}
*year = functionYear;
*month = functionMonth;
*date = functionDate;
}
findMonthLength()
送信された月の長さを表す整数値を返します。1 = 1 月など。その年を使用して、うるう年かどうかをテストします。
現在は 2013 年 4 月 3 日です。ただし、私の関数は 4 月 15 日を検出し、問題がどこにあるかを見つけることができないようです。
編集:わかりました。私の最初の問題は、月を見つけるときにうるう年をチェックすることを覚えていましたが、毎年見つけるときにそれを忘れていたため、数日ずれてしまったことです。2 つ目の問題は、UTC からローカル タイム ゾーンに変換しなかったことです。