2007年10月15日

日付型(DateTime)の初期値を判定

VB6まではDate型は8バイトのDouble形式で値が格納されていた。
整数部が日付で小数部が時刻という具合である。

プログラムの中で日付型の変数に値があるかどうか、言い方を変えると使用されたかどうか、を判断するのにその値が0であるかどうかでチェックすることができた。

VB.NET(VB2005)になって仕様が変わってこの方法がそのまま使えなくなった。そこで違いを確認し、初期値(定義直後の値)を確認する方法をまとめた。

以下は日付型の変数にNow関数とDate関数(VB2005はToDay関数)で現在日時と現在日付を取得しそのまま表示させたものにVal関数とCDbl関数で変換を行っている。また変数を定義した直後の値も同様に表示している。VB2005の場合はToOADate関数でVB6のCDbl関数で取得したのと同様の結果が得られる。またToBinary関数ではVB6には無かった100ナノ秒単位までの値を含む64ビットのシリアル値を表示する。このToBinaryをみると定義直後の値が0であることが良く分かる。

・VB6の場合
VB6の場合

Dim d1 As Date
d1 = Now
Text1.Text = d1
Label4.Caption = "Val : " & Val(d1) & vbCrLf & "CDbl : " & CDbl(d1)
Text2.Text = Date
Label5.Caption = "Val : " & Val(Date) & vbCrLf & "CDbl : " & CDbl(Date)
Dim d2 As Date
Text3.Text = d2
Label6.Caption = "Val : " & Val(d2) & vbCrLf & "CDbl : " & CDbl(d2)


・VB2005の場合
VB2005の場合

Dim d1 As DateTime = Now
TextBox1.Text = d1
Label4.Text = "Val : " & Val(d1) & vbCrLf & _
"ToOADate : " & d1.ToOADate & vbCrLf & _
"ToBinary : " & d1.ToBinary
TextBox2.Text = Today
Label5.Text = "Val : " & Val(Today) & vbCrLf & _
"ToOADate : " & Today.ToOADate & vbCrLf & _
"ToBinary : " & Today.ToBinary
Dim d2 As Date
TextBox3.Text = d2
Label6.Text = "Val : " & Val(d2) & vbCrLf & _
"ToOADate : " & d2.ToOADate & vbCrLf & _
"ToBinary : " & d2.ToBinary


posted by なっちゃん at 11:43| 静岡 ☀| Comment(0) | TrackBack(0) | VB vs VB.NET | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。