[リストへもどる]
一括表示

投稿時間:2003/08/20(Wed) 21:20
投稿者名:番頭
URL :
タイトル:
ミリ秒の足し算
VB6.0SP5において、
Date変数でミリ秒単位でカウントアップしたいのですが
どのようにすればよいでしょうか?

投稿時間:2003/08/20(Wed) 22:06
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: ミリ秒の足し算
> Date変数でミリ秒単位でカウントアップしたいのですが
ストップウォッチのような事をしたいなら、ここの日付・時刻・日数関係のところ
を見て下さい。

投稿時間:2003/08/20(Wed) 23:46
投稿者名:番頭
URL :
タイトル:
Re^2: ミリ秒の足し算
やりたいことは以下のとおりです。
1.現在時刻を取得する。
2.1.で取得した時刻に固定時間(ミリ秒)を加算
3.表示
4.あるタイミングで2,3の繰り返し
※ただし、1.で取得する現在時刻はDate型に限る

> ストップウォッチのような事をしたいなら、ここの日付・時刻・日数関係のところ
> を見て下さい。
拝見しましたがやりたい事とはちょっとニュアンスが異なるようで、
もっとシンプルにできないかな?と思いまして。。。

投稿時間:2003/08/21(Thu) 00:55
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: ミリ秒の足し算
現在時刻を1/100秒単位で現す関数 と同様の方法でいいのでは?

投稿時間:2003/08/21(Thu) 08:04
投稿者名:番頭
URL :
タイトル:
Re^4: ミリ秒の足し算
> 現在時刻を1/100秒単位で現す関数 と同様の方法でいいのでは?
すみません、説明が足りませんでした。
この時に表示する書式はyyyy/mm/dd hh:nn:ssでミリ秒の単位は
表示しないのです。従いまして、
2003/08/21 09:10:30
2003/08/21 09:10:30
2003/08/21 09:10:31
2003/08/21 09:10:32
2003/08/21 09:10:32
のような一見不規則な表示だけど、同じ日付が三行は表示されない。
という代物なのですが、やはり始めの時刻をDate型以外の型で保持しておいて
Date型に変換するしかないのでしょうか?

投稿時間:2003/08/21(Thu) 09:31
投稿者名:batchman
Eメール:
URL :
タイトル:
Re^5: ミリ秒の足し算
> という代物なのですが、やはり始めの時刻をDate型以外の型で保持しておいて
> Date型に変換するしかないのでしょうか?

「日付型」をヘルプで調べれば、日付型ではミリ秒は格納できないことが分かります。

#ヘルプ抜粋
日付型 (Date) の変数は、IEEE 64 ビット (8 バイト) の浮動小数点数の変数です。
西暦 100 年 1 月 1 日〜西暦 9999 年 12 月 31 日の範囲の日付と、
0:00:00 〜 23:59:59 の範囲の時刻を表すことができます。
整数部の値は日付、小数部の値は時刻として表されます。
午前 0 時は 0、正午は 0.5 です。負の整数は 1899 年 12 月 30 日より前の日付を表します。

時刻は、秒を一日の総秒数86400秒で割った値です。
よってミリ秒は保持できません。ミリ秒単位での計算も出来ません。

別の変数にミリ秒を加算していき、1000ミリ秒を超えたら日付型に加算するとかしないといけませんね。

投稿時間:2003/08/21(Thu) 10:08
投稿者名:番頭
URL :
タイトル:
Re^6: ミリ秒の足し算
> 別の変数にミリ秒を加算していき、1000ミリ秒を超えたら日付型に加算するとかしないといけませんね。
お騒がせ致しました。
結局、開始時刻からの経過時間のみを加算していって
表示直前で開始時間にDate型に加算する方法にしました。
もっと簡単にできるかな?と思っていたのですが...

投稿時間:2003/08/21(Thu) 10:38
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: ミリ秒の足し算
> 「日付型」をヘルプで調べれば、日付型ではミリ秒は格納できないことが分かります。

可能です。日付型そのものはDouble型の流用なので、保持することができます。
ただ、VBの標準の関数・ステートメントを介してだと、難しいですけど。
以前、日経ソフトウエア2001-12号でSNTPクライアントを作ったときは、
日付型を利用してミリ秒を扱いました。

投稿時間:2003/08/21(Thu) 18:07
投稿者名:batchman
Eメール:
URL :
タイトル:
Re^2: ミリ秒の足し算
> > 「日付型」をヘルプで調べれば、日付型ではミリ秒は格納できないことが分かります。
>
> 可能です。日付型そのものはDouble型の流用なので、保持することができます。
> ただ、VBの標準の関数・ステートメントを介してだと、難しいですけど。

うお、出来るのですか...
出来ないと言い切って恥ずかしいかぎりです。番頭さんにお詫びいたします。m(_o_)m

APIかなにかで実現できるのでしょうか?
私の提示したやり方より簡単そうならば、参考の為に教えて頂きたいです。

投稿時間:2003/08/21(Thu) 18:48
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: ミリ秒の足し算
あえてするのであれば、Double型に変換して、それを使う、といった
ところでしょう。文字列化するときなどは、自前で割り算して算出
しましょう。

投稿時間:2003/08/22(Fri) 10:46
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^6: ミリ秒の足し算
> > という代物なのですが、やはり始めの時刻をDate型以外の型で保持しておいて
> > Date型に変換するしかないのでしょうか?
> 「日付型」をヘルプで調べれば、日付型ではミリ秒は格納できないことが分かります。

ちなみに、SWbemDateTimeオブジェクトという物もあります。

これだと、(1601年1月1日以降のデータであれば)100ナノ秒単位の情報までを正確に保持可能です。
また、プロパティの設定によっては、(時刻ではなく)時間として扱うように変更する事も出来ます。

Set o = CreateObject("WbemScripting.SWbemDateTime")
o.SetVarDate Now, True  'VBのDate型を、時差情報付きで格納
o.Microseconds = 123456 'マイクロ秒の部分の情報を修正

y = o.Year              '32bit整数型として取得(年)
m = o.Month             '32bit整数型として取得(月)
d = o.Day               '32bit整数型として取得(日)
h = o.Hours             '32bit整数型として取得(0〜23)
n = o.Minutes           '32bit整数型として取得(0〜59)
s = o.Seconds           '32bit整数型として取得(0〜59)
z = o.Microseconds      '32bit整数型として取得(0〜999999)

v = o.GetFiletime       '64bit整数値を表す文字列として取得(最小単位:100ナノ秒)
x = o.GetVarDate()      'VBの日付型として取得(最小単位:1秒)
f = o.Value             'yyyymmddHHNNSS.mmmmmmsUUU+XXX形式の文字列として取得


ただしこれは WMI系のオブジェクトなので、古いOS環境の場合は、
別途、Windows Management Instrumentation のセットアップが必要です。
(最近のOSなら、標準でWMIが利用できますけれどね)

もし、WMIが無い環境でも使いたいなら、VB標準の Double や 10進型Variant などを
使って、自前で数値←→日時変換処理を書いた方が良いかも知れません。

投稿時間:2003/08/22(Fri) 11:55
投稿者名:番頭
URL :
タイトル:
どうもありがとうございました。
おかげさまで、いっぱい知識が増えました。
皆様どうもありがとうございました。
m(__)m