
No.2ベストアンサー
- 回答日時:
.net framework 上で "時間" は TimeSpan 型を使う。
DateTime 型どうしの計算をすると、結果は自動的に TimeSpan 型で返ってくる。
(1) 2つの時刻の差
DateTime が "xx時xx分" という値を認識するとは思ってもいなかった。
Dim dt1 As DateTime = DateTime.Parse("08時28分")
Dim dt2 As DateTime = DateTime.Parse("17時04分")
Dim result As TimeSpan = dt2 - dt1
Label2.Text = String.Format("{0}時間{1}分", Math.Floor(result.TotalHours), result.Minutes)
(2) 3つの時間の合計
3つの "時間" とあったので、最初から TimeSpan を使っているが、DateTime であっても問題ないかもしれない。
合計の "時" は TimeSpan 型の Hour で取れるが、24時間を越える場合も "時" の部分しか取れないので TotalHours プロパティを使った。
TotalHours は分秒の値も少数で持っているので切り捨てている。
Dim span1 As TimeSpan = TimeSpan.Parse("8:36:0")
Dim span2 As TimeSpan = TimeSpan.Parse("6:8:0")
Dim span3 As TimeSpan = TimeSpan.Parse("9:54:0")
Dim result As TimeSpan = span1 + span2 + span3
Label4.Text = String.Format("{0}時間{1}分", Math.Floor(result.TotalHours), result.Minutes)
(3) 時間の平均
平均を算出する部分は関数にでもしておけばよいと思う。
今回はサンプル数が 3つなのでベタに書いている。
時間の合計から TotalMinutes で分に直した値で平均値を出して、それを FromMinutes で TimeSpan 型に戻している。
Dim span1 As TimeSpan = TimeSpan.Parse("8:36:0")
Dim span2 As TimeSpan = TimeSpan.Parse("6:8:0")
Dim span3 As TimeSpan = TimeSpan.Parse("9:54:0")
Dim totalValue As Double = span1.TotalMinutes + span2.TotalMinutes + span3.TotalMinutes
Dim averageMinutes As Double = Math.Floor(totalValue / 3)
Dim result As TimeSpan = TimeSpan.FromMinutes(Math.Floor(averageMinutes))
Label6.Text = String.Format("{0}時間{1}分", Math.Floor(result.TotalHours), result.Minutes)
この回答へのお礼
お礼日時:2013/02/18 10:04
早速の回答をありがとうございました。
この部分に来るまでに時間がかかり、お礼が遅くなりました。申し訳ありませんでした。
回答いただいた通りにしたところ、上手く行きました!!!ありがとうございました!
また何かありましたら、その節もよろしくお願いします。
No.1
- 回答日時:
こんにちは
1番目はどのような方法でもさほど変わりがありませんね。
2番目と3番目は時間と分だけですので、全部分に変換してから、計算後再度時間と分に変換する方法と時間の部分と分の部分を別別に計算する方法がありますが、なんとなく一度分に変換してから計算して再度時間と分に変換した方がスッキリするみたいです。
Public Class Form1
Private Sub f() Handles MyBase.Shown
Dim dt1 As DateTime = DateTime.Parse("17:04:00")
Dim dt2 As DateTime = DateTime.Parse("08:28:00")
Dim dt3 As TimeSpan = dt1 - dt2
Label1.Text = dt3.Hours.ToString & "時間" & dt3.Minutes.ToString & "分です。"
'「時」と「分」を個別に計算
Dim dt4 As DateTime = DateTime.Parse("08:36:00")
Dim dt5 As DateTime = DateTime.Parse("06:06:00")
Dim dt6 As DateTime = DateTime.Parse("09:54:00")
Dim dth As Integer = dt4.Hour + dt5.Hour + dt6.Hour '時間の合計
Dim dtm As Decimal = dt4.Minute + dt5.Minute + dt6.Minute '分の合計
Dim dt8 As Decimal = Math.Floor(dtm / 60) '分の繰り上げ
Dim dt9 As Integer = dtm Mod 60 '分の繰り上げの余り
Label2.Text = "合計は " & (dth + dt8).ToString & "時間" & dt9.ToString & "分です。"
'全部一度分に変換して計算後再度「時」と「分」に変換
Dim dt10 As Decimal = dth * 60 + dtm '時間の合計を分に変換 分の部分も足す
Dim dt11 As Decimal = Math.Floor((dt10 / 60) / 3) '分の合計を時間に変換
Dim dt12 As Decimal = (dt10 Mod 60) / 3 '分の合計を時間に変換したときの余り
Label3.Text = "平均は " & dt11.ToString & "時間" & dt12.ToString & "分です。"
End Sub
End Class
この回答へのお礼
お礼日時:2013/02/18 10:01
早速の回答をありがとうございました。
この部分に来るまでに時間がかかり、お礼が遅くなりました。申し訳ありませんでした。
非常に参考になりました。
また何かありましたら、その節もよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カラーコード 濃くしたい
-
経過日数を調べたい
-
Matlabで群遅延特性
-
Designer.vbは直接コードをいじ...
-
意味不明の実行時エラーで困っ...
-
VB.NETで参照設定したDLLの修正...
-
VBAでArrayListを使う為の「msc...
-
ManagementClassが見つからない。
-
Visual Studio 「AnyCpu」について
-
「読み込み違反」が起きたとき...
-
C++初心者です。 debug asserti...
-
exeファイルを実行するとすぐに...
-
[VB.net] ExcelへのQRコード出...
-
ActiveReportsを使って[印刷ダ...
-
accessがインストールされてい...
-
アウトルックが起動しているか...
-
VBで実行中のEXEファイルの情報...
-
VBAでOutlookを終了させたい Ex...
-
VB.NET+ActiveReports で印刷...
-
VBAからDLLをCALLしたいのですが
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのクエリの値を変換(代入...
-
経過日数を調べたい
-
VB2013での時間帯判定で困って...
-
画像を二次元フーリエ変換
-
このコードはどこが間違ってい...
-
カラーコード 濃くしたい
-
秒数を入力すると○時間○分○秒と...
-
Excelで文字を数値に変換する方...
-
変数の型を変換する方法を教え...
-
Matlabで群遅延特性
-
4桁の整数の前位の足し算を行い...
-
DateDiff関数の怪!?
-
離散コサイン変換(DCT)について
-
自動車ローンの計算式について
-
電卓の作成 VB
-
あと何日or何日目?を計算する方法
-
matplotlibで任意の角度の円弧...
-
VBで時間計算の方法
-
ウェーブレット変換に関して
-
階乗の逆数を計算するFunction...
おすすめ情報