例えば仮に
Dim timeStr As String = ”00:15:00”
Dim timeMinus As String = ”00:02:00”
としたうえで、String型からDate型(フォーマット = mm:ss:ff)へ変換を行い、「timeStr - timeMinus」で「00:13:00」という値をDate・String両方で出力したいのです。
まとめとしてはこんな感じで。
例)”00:15:00”(String型) - ”00:02:00”(String型) = ”00:13:00”(Date/String型)
MSDNも見たんですが難しくて初心者には全然理解不能で、粘ってみたんですがどうしても探しきれませんでした。どうか知恵をお貸しください。よろしくお願いします。
URLはダミーです。
欲しいのが秒単位だとすると、引きたい時間数を秒数にして、元の時間からその秒数を引けばいいと思います。
===================================
Dim timeStr As String = ”00:15:00”
Dim timeMinus As String = ”00:02:00”
Dim dtV1 As Date ’元の時間
Dim dtV2 As Date ’引きたい時間
Dim lDiff As Long ’引きたい秒数
Dim dtAns As Date ’求める日時
Dim stAns As String ’求める文字列
dtV1 = timeStr
dtV2 = timeMinus
lDiff = DateDiff(DateInterval.Second, #00:00:00#, dtV2)
dtAns = DateAdd(DateInterval.Second, 0 - lDiff, dtV1)
stAns = dtAns
===================================
http://www.atmarkit.co.jp/fdotnet/dotnettips/267timespan/timespa...
@IT:.NET TIPS 日時や時間間隔の加減算を行うには? - C# VB.NET
TimeSpan構造体というのがあるようです。
便利に使えそうですね。
Dim timeStr As String = ”00:15:00”
Dim timeMinus As String = ”00:02:00”
’ フォーマット用文字列
Dim f As String = ”hh:mm:ss”
’ DateTime型に変換
Dim a As DateTime = DateTime.ParseExact(timeStr, f, Nothing)
Dim b As DateTime = DateTime.ParseExact(timeMinus, f, Nothing)
’ TimeSpan構造体として2つのDateTimeの差異を取得
Dim timeCompareResult As TimeSpan = a.Subtract(b)
’ timeStrの値がtimeMinusより小さい場合のみ処理
If (timeCompareResult.TotalSeconds >= 0) Then
’ 例としてMsgBoxで表示
MsgBox(Format(timeCompareResult.Hours, ”0#”) & ”:” & Format(timeCompareResult.Minutes, ”0#”) & ”:” & Format(timeCompareResult.Seconds, ”0#”))
’ 以下のように分けても良いかもしれないですね
’ Dim hours As Integer = timeCompareResult.Hours
’ Dim minutes As Integer = timeCompareResult.Minutes
’ Dim seconds As Integer = timeCompareResult.Seconds
’ MsgBox(Format(hours, ”0#”) & ”:” & Format(minutes, ”0#”) & ”:” & Format(seconds, ”0#”))
Else
MsgBox(”timeStrの値がtimeMinusより大きいですよ。”)
End If
マイナスになる場合、このやり方だと時、分、秒それぞれの差異が出力されるので、
01:-02:03
のような出力になってしまいます。
(上記のサンプルではIf文ではじいていますので、実際には出力されません。)
http://www.hatena.ne.jp/1138308234#
人力検索はてな - VB2005Expressで、2つの変数に格納されたString型の時間表示(例 = 00:15:00と00:02:00)をDate型(フォーマット = mm:ss:ff)に変換し、その計算をしたいのですが、うま..
URLはダミーです。
古いやり方だったら以下のような感じになると思います。
こちらはDateDiffで2つの時刻の差異を秒で取得し、出力用に整形しています。
Dim timeStr As String = ”00:15:00”
Dim timeMinus As String = ”00:03:00”
Dim timeCompareResult As Double = DateDiff(DateInterval.Second, Date.Parse(timeMinus), Date.Parse(timeStr))
If timeCompareResult >= 0 Then
Dim Hours As Integer = timeCompareResult / 3600
Dim Minutes As Integer = timeCompareResult / 60 - Hours * 60
Dim Seconds As Integer = timeCompareResult - Hours * 3600 - Minutes * 60
MsgBox(Format(Hours, ”0#”) & ”:” & Format(Minutes, ”0#”) & ”:” & Format(Seconds, ”0#”))
Else
MsgBox(”timeStrよりもtimeMinusの方が値が大きいですよ。”)
End If
回答ありがとうございます。TimeSpanですかー。まだ私には理解がいまひとつ出来てないのですが、無事出力できました(いや、当たり前でしょうけど)。
勉強がてら、失礼ながらいろいろいじらせてもらいましたが、mm:ss:ffにできるみたいですね。DateTimeってこういう意味だったのか!と思いました。とりあえずまだわからないところはあるのでMSDNで調べつつ勉強していきたいと思います。
ありがとうございました。一応解決したのですが、その他に便利な回答があるかわからないので、もう少し質問を続けておきたいと思います。上記以外のお答え以外であればよろしくおねがいします。
http://www.atmarkit.co.jp/fdotnet/dotnettips/203dateparse/datepa...
@IT:.NET TIPS 日付や時刻の文字列をDateTimeオブジェクトに変換するには? - C# VB.NET
質問読み違えてました。
hh:mm:ssでの説明になっていたのでmm:ss:ffに修正いたしました。
Dim timeStr As String = ”00:15:00”
Dim timeMinus As String = ”00:02:00”
’ フォーマット用文字列
Dim f As String = ”mm:ss:ff”
’ DateTime型に変換
Dim a As DateTime = DateTime.ParseExact(timeStr, f, Nothing)
Dim b As DateTime = DateTime.ParseExact(timeMinus, f, Nothing)
’ TimeSpan構造体として2つのDateTimeの差異を取得
Dim timeCompareResult As TimeSpan = a.Subtract(b)
’ timeStrの値がtimeMinusより小さい場合のみ処理
If (timeCompareResult.TotalMilliseconds >= 0) Then
’ 例としてMsgBoxで表示
’ ffの部分はミリ秒の値を10で割って算出
MsgBox(Format(timeCompareResult.Minutes, ”0#”) & ”:” & Format(timeCompareResult.Seconds, ”0#”) & ”:” & Format(timeCompareResult.Milliseconds / 10, ”0#”))
Else
MsgBox(”timeStrの値がtimeMinusより大きいですよ。”)
End If
あ、今まさに、コメント書いた直後でした。(笑
私がいじったのとほぼ同じでしたが、ミリセカンドの部分を10で割るのは思いつきませんでした。というか今まさに調べてました。わざわざありがとうございます。
回答ありがとうございます。早速MSDNを開きつつ勉強させていただきました。
VB2005Expressだと
lDiff = DateDiff(DateInterval.Second, #00:00:00#, dtV2)
が、自動的に
lDiff = DateDiff(DateInterval.Second, #12:00:00 AM#, dtV2)
に変換されてしまうみたいですが、確かに引き算されているみたいです。
タイムフォーマットがhh:mm:ssのままというのが残念ですが、まぁ最悪表示さえ出来ればいいので、これでも問題なしです。ありがとうございました。