24時間を超える時間を足すには?

解決


エメ  2007-09-10 21:39:54  No: 137377

お世話になります。VB6.0/SQLServer2000です。
プログラムのログイン時間を集計したいのですが、
現状、For文で1日毎のログイン時間を足しています。

  Dim LoginTime As Date

    For i = 1 To 31
        LoginTime = LoginTime + CDate(RS.Fields("LoginTime"))
  Next i

この場合、累計が24時間以上の場合(例:25時間)、1899/12/31 1:00:00となってしまいます。
25:00:00として集計していく方法はありますでしょうか。
よろしくお願いします。


大吉末吉  2007-09-10 23:12:23  No: 137378

Date型は「日付・時刻」を扱うもので、「日数・時間」を扱うものではありません。
ですから、25「時間」は扱えません。
#「23時59分59秒」までです。
#「23時間59分59秒」では無いです。

しかし、VB6のDate型は、内部的に、基準時刻(1899/12/30 00:00:00)からの差分として、管理されています。

ですから、その差分を使って「経過時間」を求めることは可能です。

#例えば、DateDiff関数で、基準時刻からの差分時間(H)を求めるとか、
#差分秒数(S)を求めて、3600で割るとか・・・


エメ  2007-09-10 23:54:44  No: 137379

大吉末吉さん有難うございます。

根本的に考え方が違ってました。

VB6では基準時刻は(1899/12/30 00:00:00)で固定という考えで
よろしいのでしょうか?

>#例えば、DateDiff関数で、基準時刻からの差分時間(H)を求めるとか

datediff("h","1899/12/30 00:00:00",(Cdate("15:00:00") + Cdate("10:00:00"))) & _
":" & format((Cdate("15:00:00") + Cdate("10:00:00")),"nn:ss") 

このように作成してみましたが、"1899/12/30 00:00:00"は、ベタ書きで問題ないですか?


大吉末吉  2007-09-11 00:24:58  No: 137380

> VB6では基準時刻は(1899/12/30 00:00:00)で固定という考えで
> よろしいのでしょうか?

一応VB6のヘルプ(MSDNライブラリ)の
「バリアント型の詳細」に
--------------------------------------------------------------------
日付リテラルに時刻が含まれていない場合、その値の時刻の部分は午前 0 時 (1 日の始まり) に設定されます。
また、日付が含まれていない場合、その値の日付の部分は、1899 年の 12 月 30 日に設定されます。
--------------------------------------------------------------------
とあるので大丈夫だと思いますが・・・

「CDate(0)」とか、しておけば、確実だと思います。


エメ  2007-09-11 00:33:34  No: 137381

大吉末吉さん

どうにか修正が完了しました。
問題なく動いています。

重ね重ね有難うございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加