人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VB2005Expressで、2つの変数に格納されたString型の時間表示(例 = 00:15:00と00:02:00)をDate型(フォーマット = mm:ss:ff)に変換し、その計算をしたいのですが、うまくいきません。

例えば仮に

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も見たんですが難しくて初心者には全然理解不能で、粘ってみたんですがどうしても探しきれませんでした。どうか知恵をお貸しください。よろしくお願いします。

●質問者: kreuz2nd
●カテゴリ:コンピュータ 趣味・スポーツ
✍キーワード:00 AS ff MM MSDN
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● EddyYamanaka
●34ポイント

http://yama.eddy.com/5Star.jpg

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

===================================

◎質問者からの返答

回答ありがとうございます。早速MSDNを開きつつ勉強させていただきました。

VB2005Expressだと

lDiff = DateDiff(DateInterval.Second, #00:00:00#, dtV2)

が、自動的に

lDiff = DateDiff(DateInterval.Second, #12:00:00 AM#, dtV2)

に変換されてしまうみたいですが、確かに引き算されているみたいです。

タイムフォーマットがhh:mm:ssのままというのが残念ですが、まぁ最悪表示さえ出来ればいいので、これでも問題なしです。ありがとうございました。


2 ●
●33ポイント

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で調べつつ勉強していきたいと思います。

ありがとうございました。一応解決したのですが、その他に便利な回答があるかわからないので、もう少し質問を続けておきたいと思います。上記以外のお答え以外であればよろしくおねがいします。


3 ●
●33ポイント

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で割るのは思いつきませんでした。というか今まさに調べてました。わざわざありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ