• 締切済み

VC++で時間の計算をしたいのですが・・・

DataGridViewに表示した時間1から時間2までの経過時間を計算したいのですが、どのようにすればいいかわかりません。 データはcsvファイルから読み取り、DataGridViewに表示。 ユーザが入力し、上書き保存する、という流れを繰り返します。 項目は1行に9個あり、array<String^>^ Column[8]と配列を準備しています。 5列目が時間1(inTime)、6列目が時間2(outTime)となっています。 入力の形としては、inTimeに8:30、outTimeに20:20と入力し、その経過時間を9列目sumTimeに入れます。 経過時間は分単位、第1小数点まで求めたいです。 計算が必要なので、int型で宣言しています。最大で24時間以上の差がでることはありません。 日付は1列目に"9/20"とまとめてString型で入っています。 データの入出力はできたのですが、計算となると型の変換が必要となり、自分ではできませんでした。 開発環境はVC++2010.NET です。 プログラミングの経験もなく、VCもまだ始めたばかりの初心者です。 しかし、課題なので言語などは変更できません。 私だけでは解決できないので、よろしければアドバイスややり方を教えてください。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

.NET FrameworkのDateTimeとTimeSpanを使えばいいと思いますよ DateTime% d1 = DateTime::ToDay; DateTime% d2 = DateTime::ToDay; TimeSpan sp; long ldata; DateTime::TryParse( dt->Rows[n][L"in"], d1 ); DateTime::TryParse( dt->Rows[n][L"out"], d2 ); sp = d2 - d1; // 分単位を取得 ldata = (long)sp->TotalMinutes; // 6分の正規化 ldata /= 6; ldata *= 6; dt->Rows[n][L"sum"] = (double)ldata/60.; といった具合で

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

アルゴリズム(というか手順)の問題かと。 その前に… >入力の形としては、inTimeに8:30、outTimeに20:20と入力し、その経過時間を9列目sumTimeに入れます。 8時30分と20時20分…ですか? 8分30秒と20分20秒ですか? 前者なら秒の情報が無いので… >経過時間は分単位、第1小数点まで求めたいです。 で小数点未満が出ることはありませんが。 それとも、CSVには秒単位にデータが入っていて、表示するときに秒の切り捨て(あるいは繰り上げ)でもしているのでしょうか? とりあえず、数値に変換する際に「分単位」に揃えます。 # CSVが秒単位なら秒単位に揃える。 20*60+20と8*60+30という具合に。 でoutTimeからinTimeを引けば経過時間になります。 # 負数になったら24時間分を加算…ですかね。 分単位に揃える。とかしなくても時間を扱うクラスなどでさっくり処理できる場合もありますが。 # MFCならCTimeとCTimeSpanとか。

cocoa0529
質問者

お礼

回答ありがとうございます。 入力は8時30分と20時20分という意味です。 説明にまちがいがありました。 単位は最終的に時間に直さなければなりませんでした。 小数点が出るのは、6分ごとに0.1を足す計算となっているからです。 60分、つまり1時間たったときに1という計算です。 もし経過時間が8時30分から20時20分の場合、11時間と50分となります。 なので、11*60+50(分)/60=11.8時間(小数第2切り捨て)としたいのです。 .NET FreamWorkなので、MFCのクラスは使えないみたいでした。 入力の際に時間と分の間にコロンが入ってしまいます。(20:40のように) 計算するときには、左から2文字などのように指定ができるのでしょうか。