2017-09-12 14 views
-5

私はC++の初心者です。私は日付を使用することに苦労していました。私はctimeライブラリが役立つかもしれないと思ったが、わからない。日付をC++で比較する

私のプログラムでは、誰かがクラブに入会した日付を入力させる必要があります。会費を計算するには、それを現在の日付と比較する必要があります。

また、日付を取り込む最良の方法(たとえば、日/月/年を別々に入力するか、文字列としてまとめて入力するなど)についてもわかりませんでした。

私はこれを行う簡単な方法を見つけることができず、私はいくつかの助けに非常に感謝します。ありがとうございました。

+1

よう

何かが日/月/年と混乱しないでください。ある時点の後に秒を使用します。 – Ripi2

+0

それにはどのようなコマンドが含まれますか?編集:また、いくつかの月が異なる長さがあるので、それは動作しますか? – stylersolve

+1

http://en.cppreference.com/w/cpp/chrono/time_point – Ripi2

答えて

0

リファレンスhttps://stackoverflow.com/a/997988/3989888

#include <ctime> 
#include <iostream> 
using namespace std; 

int main() { 
    time_t t = time(0); // get time now 
    struct tm * now = localtime(& t); 
    cout << (now->tm_year + 1900) << ' ' 
     << (now->tm_mon + 1) << ' ' 
     << now->tm_mday 
     << endl; 

    cout<<"Enter Date YYYY MM DD"<<endl; 
    int y,m,d; 
    cin>>y; 
    cin>>m; 
    cin>>d; 

    cout<<"Member since: "<<y-now->tm_year-1900<<" years "<<m-now->tm_mon-1<<" months "<<d-now->tm_mday<<" days "<<endl; 

} 
+0

ありがとうございました!これは非常に有用ですが、負の月/日と戦う方法はありますか?多分、私はifステートメントを使用し、それらをソートすることができます(ただし、何ヶ月もの長さで何をすべきかはわかりません)。 – stylersolve

3

あなたは、ユーザからの日付を取得してのstrptimeを使用してtm構造体にそれを解析することができます。

tm timeDate; 
strptime(input_str.c_str(),"%Y-%m-%d %H:%M", &timeDate); // define date/time format convenient for you here; this is just an example 

はその後のtime_t型に変換:たとえば

time_t time_input = mktime(&timeDate); 

はその後、別のtime_tとの比較(同じ方法で作成したか何が必要現在のシステム時刻またはを取得することにより) ;使用

double timeDiff = difftime(time_input, other_time_t_value); 

資源:

time tutorial

similar question

related question

別のオプションは、ブーストのdatetimeライブラリかもしれません(私はそれを自分自身を使用して覚えていないので、私は」勝ちましたあなたを参照する以上にお勧めします)here

この質問を読んでいる人への注意:OPはC++ 11以降を使用していないと思います。あなたがいるなら、this answerがあなたのために良いかもしれません。

+0

ありがとうございます。私は時間を含める必要がありますか、または単に日付の違いを見つけることはできますか? – stylersolve

+0

あなたはちょうど日付を使用することができます、私は信じています。フォーマット文字列内の日付要素だけを使用してください。 – Basya

+0

私はY、m、およびd変数を入力すると仮定します。それは有益な感謝のようです。 – stylersolve

0

真剣に今ですか?最新のコードを書いて使用してください。 std::chrono::duration

#include <chrono> 
#include <iostream> 

int main() { 
    auto long_ago = 
    std::chrono::system_clock::time_point(); 
    std::chrono::duration<double> diff = 
    std::chrono::system_clock::now() - long_ago; 
    std::cout << "Seconds since Jan 1 1970: " << diff.count() << std::endl; 
} 
+0

#1:他人を尊重してください。 #2:OPはこれをサポートするコンパイラを使用していないとコメントしました。 – Basya