私はC++を新しくしていますので、より流暢に日付を扱うためのライブラリがあるかどうかは疑問です。C++の日付に日を追加する
私はかなり普通の仕事をしています。私はさまざまな価値の開始日を持っており、日数を乱数で増やすと、どのような日になるのかを知る必要があります。
mktime
とtime_t
オブジェクトの継ぎ目が私がしようとしているものに役立つと考えました。彼らが答えであれば誰かが私に良いガイドへのリンクを与えることができますか?
私はC++を新しくしていますので、より流暢に日付を扱うためのライブラリがあるかどうかは疑問です。C++の日付に日を追加する
私はかなり普通の仕事をしています。私はさまざまな価値の開始日を持っており、日数を乱数で増やすと、どのような日になるのかを知る必要があります。
mktime
とtime_t
オブジェクトの継ぎ目が私がしようとしているものに役立つと考えました。彼らが答えであれば誰かが私に良いガイドへのリンクを与えることができますか?
ブースト:Boost.Date
Qtフレームワーク:QDateTime
CodeProjectのは、ホストされている:CTime
をあなたは基本的に自分で日付と時刻を処理したい場合:C/C++ standard library
日は通常86400秒です(leap secondsを除く)。あなたは、その後、あなたはBoost Date and time moduleがどちらかあり、strftime
で表示可能で、まあstrptime
で解析可能なことができたstruct tm
に変換するmktime
& localtime
を使用することができますtime_t
にそれを追加して、など新しいtime_t
を得ることができます。あなたのコンパイラが十分に新しいものであれば、C++ 11 chrono名前空間があります。
私は自分の関数を書いて、日、月、年を既存のDATEクラスに追加しました。私はまだそれをテストすることができませんでしたが、多分それは役立ちます:
bool DATE::add(int Day, int Month, int Year){
int DaysPerMonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
this -> Day += Day;
while(this -> Day > DaysPerMonth[ this-> Month ]){
if((this -> Year % 4 == 0 && this -> Year % 100 != 0) || this -> Year % 400 == 0){
DaysPerMonth[2] = 29;
}
this -> Day -= DaysPerMonth[ this-> Month ];
this -> Month++;
if(this -> Month > 12){
this -> Month = 1;
this -> Year++;
}
}
this -> Month = (this -> Month + (Month % 12));
this -> Year = (this -> Year + Year + (Month/12));
if((this -> Year % 4 == 0 && this -> Year % 100 != 0) || this -> Year % 400 == 0){
DaysPerMonth[2] = 29;
// check pathologic case wether date is 1 of March and added Year targets switchyear
if(this -> Day == 1 && this -> Month == 3){
this -> Day = 29;
this -> Month = 2;
}
}
if(this -> Month < 1 || this -> Month > 12 || this -> Day < 1 || this -> Day > DaysPerMonth[this->Month]){
valid = false;
cerr << "something went wrong, calculated Date is: " << this -> Day << "."<< this -> Month << "." << this -> Year << endl << flush;
return false;
}else{
return true;
}
}