• ベストアンサー

日付の差を求めるには

VB6.0で開発しています。 DBに時刻の列名「YEARMONTHDAY」「HOUR」(1~24)がNUMBER型として入っています。 DBより取得した「YEARMONTHDAY」と「HOUR」で日付の差を求めたいのですが, HOURに24の値がきた際,DATE型の範囲以上の為エラーになってしまいます。 なにか日付の差を求める良い方法があればご教授下さい。 (例) Dim pdtm_RecTime As Date Dim str_wk As String '// EOFまでループ Do Until objDynaset.EOF '// 記録日取得 str_wk = Format$(CStr(YEARMONTHDAY.Value) & Format(CStr(HOUR.value), "00") & "00", "0000/00/00 00:00") pdtm_RecTime = CDate(str_wk) ________________________________________________________________________________ 上記のPGだとHOURが24の場合にDateの範囲を超える為エラーになる。 '// 日付差チェック pVar_Diff = DateDiff("h", DateAdd("h", pInt_Hour, gDtm_GrpSDate), pdtm_RecTime) '// データがまだ存在する場合次のレコードに移動 If (objDynaset.EOF = False) Then objDynaset.MoveNext End If pInt_Hour = pInt_Hour + 1 Loop

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>str_wk = Format$(CStr(YEARMONTHDAY.Value) & Format(CStr(Hour.Value), "00") & "00", "0000/00/00 00:00") 日付/時間書式で文字列を作る pdtm_RecTime = CDate(str_wk) それを、日付時刻型に変換 ⇒結果[落ちる] のであれば str_wk = Format$(CStr(YEARMONTHDAY.Value), "0000/00/00") 日付で文字列を作る pdtm_RecTime = CDate(str_wk) それを、日付時刻型に変換 pdtm_RecTime = DateAdd("H", Hour.Value, pdtm_RecTime) それに時間を追加 してあげたら、単に24時間を足してくれると思いますよ。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

HOUR=24が「次の日の0時」を表すなら、 案a) HOUR=24の時は0とみなし、1日分DateAdd 案b) HOURから-1したもので時刻を組み立て、1時間をDateAddで追加 ――とか。

関連するQ&A

  • vb 日付の判断

    こんにちは。vb2005で日付の判断をしたいのですが、 スマートな方法がわかりません。 Dim y() as string ~ dim y(0) には 20081231 が入る ~ Dim wk As String = y(i).Insert(4, "/") wk = wk.Insert(7, "/") If IsDate(wk) Then ひづけ有効な場合 処理 とりあえずこれで、日付として成立するかを判断しているのですが、 もうすこしスマートな方法はないでしょうか?

  • Accessで、DAOでAddnew

    参照はDAOで、Addnewでデータの追加をしたいのですが、記述が悪いのか、上手くできません。 どなたか、教えて下さい! テーブル:スケジュールソース フィールド:日付 Private Cur_Db As DAO.Connection Private rs As DAO.Recordset Private sql As String Dim str_date As String str_date = Me!日付 Set Cur_Db = CurrentDb rs.Open "スケジュールソース", Cur_Db, dOpenKeyset, adLockOptimistic rs.AddNew rs("日付").Value = str_date rs.Update

  •  日付型なら変数の先頭になんてつけてますか?

    変数名で、 文字列型なら Dim str組織名 As String 数値型なら Dim intNo As Long としてるのですが、 日付型なら変数の先頭になんてつけてますか? Dim date月日 As Date にしようかなと思ったのですが なんかくどいかなって感じます。

  • 日付の比較について

    PHPで日付を比較したいのですが、、 どのようにしたらよいかわかりません。 データベースのように大なり小なりで比較できるのでしょうか? 例えば、下記のように記述した場合は日付比較は正常に行われているのでしょうか? 今日の日付 $date = date('Y-m-d'); DBから取得した日付 $str_date = '2005-05-22'; if($date < $str_data){ 処理1 }else{ 処理2 }

    • ベストアンサー
    • PHP
  • access 日付名でバックアップ

    accessでファイルをコピーして日付の名前をつけて保存したいのですがうまくいきません。 ------------------------------------------------------ Dim objFSO As FileSystemObject Dim str元ファイル As String Dim str新ファイル As String Set objFSO = CreateObject("Scripting.FileSystemObject") str元ファイル = "C:\sample.mdb" str新ファイル = "C:\format(date(),"yymmdd").mdb" objFSO.copyFile str元ファイル, str新ファイル, True Set objFSO = Nothing ------------------------------------------------------- どうも新ファイル名の指定の仕方が悪いようですがどこを直していいかわかりません。 どなたか教えてください。

  • 日付書式のString型からData型への変換

    引数での日付データを加工して、変換させたいのですがエラー("String型からData型への変換は無効です。")がでます。 対処方法をアドバイスいただけないでしょうか? コードを下記に示します。 VS 2010を使用しています。 Dim From As Long Dim Year As Integer Dim Month As Integer Dim Day As Integer From = CLng(Format(DateAdd("d", 1, DateAdd("m", -1, CDate(CStr(Year) & "/" & CStr(Month) & "/" & CStr(Day)))), "yyyyMMdd"))

  • 日付型変数を検索する方法

    シート内にある日付型の変数を検索させる処理をしたいのですが、以下のように記述したところ、 ================================== Dim hiduke As Date Dim lngYLine As Long Dim intXLine As Integer hiduke = Cells(1, 3).Value 'セルの値取得 Set Obj = Worksheets("Sheet1").Cells.Find(hiduke) If Obj Is Nothing Then MsgBox "該当の日付" & hiduke & "は、ありません。" Else lngYLine = Worksheets(newSh).Cells.Find(hiduke).Row intXLine = Worksheets(newSh).Cells.Find(hiduke).Column     MsgBox hiduke"は、" + CStr(lngYLine) + "行目の" _ + CStr(intXLine) + "列目にあります" End If ================================== Set Obj = Worksheets("Sheet1").Cells.Find(hiduke) で「実行時エラー"9" インデックスが有効範囲にありません」のエラーになります。 ワークブック内には Worksheets("Sheet1")存在しますし、なぜこのようなエラーがでるのか? また、どうしたら解消できるのか?について、教えていただきたく・・・ よろしくお願いいたします。

  • 日付の差の求め方

    Dim gStr_GrpSDate as String Dim gStr_GrpEDate as String gStr_GrpSDateに 2004/02/01 01:00 gStr_GrpEDateに 2004/02/02 24:00 が入っている場合, Int_DayDiff = DateDiff("d", gStr_GrpSDate, gStr_GrpEDate) のようにDateDiff関数を使用できたら良いのですが (1)型がString (2)gStr_GrpEDateの時刻が24時の為DateDiff関数(Date関数も)が使えない。 等の問題がありうまく処理できません。 このような場合,日付の差を取得するにはどのようにしたら 良いのでしょうか? よろしくお願い致します。

  • VB.net 登録されている日付の連続性のチェック

    VB.netについて質問です。 下記のようにデータがあったとします。 _________ 日付、コード 1/1、****** 1/1、****** 1/2、****** 1/2、****** 1/2、****** 1/4、****** 1/4、****** 1/7、****** 1/11、****** ・ ・ ・ _______ 登録されていない日付があったときにメッセージを出したいです。 下記のコーディングでは 1/4~1/7の間で(2日連続登録されていない) 1/5、1/6は登録されていません。まで出すのが精一杯です。 ______________________________ '登録されていない日があったときメッセージを出す For i = 0 To DataGridView.RowCount - 2 Dim kyou As Date = DataGridView.Rows(i).Cells(0).Value Dim tsugi As Date = DataGridView.Rows(i + 1).Cells(0).Value Dim ashita As Date = kyou.AddDays(1) Dim asatte As Date = ashita.AddDays(1) Dim shiasatte As Date = asatte.AddDays(1) '2日連続登録データが抜けていたときまでのチェック If kyou = tsugi Or tsugi = ashita Then Else If tsugi = asatte Then MsgBox(ashita & "が未登録です") Else If tsugi = shiasatte Then MsgBox(ashita & "と" & asatte & "が未登録です") End If End If End If Next ______________________________ どんなに日にち離れていても対応できるようなコーディングを教えて欲しいです。 よろしくお願いいたします。

  • 「日付条件」のDELETEできない

    access2003で、下記のプログラムを作りました。 コメント文の、「jyuu条件」ではDELETEが出来るのですが、 本プログラムの「日付条件」では、DELETEされません。 なぜでしょうか? なお、gatuは、「日付/時刻型(日付(標準))」です。 Private Sub テーブル削除() Dim db As Database Dim mysql As String Dim gappi As Date Dim jyuu As Integer gappi = #4/15/2011# jyuu = 220 'mysql = "DELETE FROM fff WHERE jyu <" & jyuu & " ; " mysql = "DELETE FROM fff WHERE gatu <" & gappi & " ; " Set db = CurrentDb db.Execute (mysql) db.Close End Sub

専門家に質問してみよう