お世話になります。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として集計していく方法はありますでしょうか。
よろしくお願いします。
Date型は「日付・時刻」を扱うもので、「日数・時間」を扱うものではありません。
ですから、25「時間」は扱えません。
#「23時59分59秒」までです。
#「23時間59分59秒」では無いです。
しかし、VB6のDate型は、内部的に、基準時刻(1899/12/30 00:00:00)からの差分として、管理されています。
ですから、その差分を使って「経過時間」を求めることは可能です。
#例えば、DateDiff関数で、基準時刻からの差分時間(H)を求めるとか、
#差分秒数(S)を求めて、3600で割るとか・・・
大吉末吉さん有難うございます。
根本的に考え方が違ってました。
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"は、ベタ書きで問題ないですか?
> VB6では基準時刻は(1899/12/30 00:00:00)で固定という考えで
> よろしいのでしょうか?
一応VB6のヘルプ(MSDNライブラリ)の
「バリアント型の詳細」に
--------------------------------------------------------------------
日付リテラルに時刻が含まれていない場合、その値の時刻の部分は午前 0 時 (1 日の始まり) に設定されます。
また、日付が含まれていない場合、その値の日付の部分は、1899 年の 12 月 30 日に設定されます。
--------------------------------------------------------------------
とあるので大丈夫だと思いますが・・・
「CDate(0)」とか、しておけば、確実だと思います。
大吉末吉さん
どうにか修正が完了しました。
問題なく動いています。
重ね重ね有難うございました。
ツイート | ![]() |