連載
プロフェッショナルVB.NETプログラミング
第5回 日付時刻の取得とフォーマット
(株)ピーデー
川俣 晶
2002/05/14
|
|
日付時刻をソースに埋め込む
ソース・コードに日付時刻を直接記述する場合は、日付リテラル形式(シャープ記号「#」で文字列を囲む)で記述するのが最も基本である。また、文字列で日付時刻を記述して日付型に変換する方法もある。これに関する若干の相違を説明する。まず、VB 6で書いたサンプル・プログラムをご覧いただきたい。
1: Private Sub Form_Load()
2: Dim d1 As Date, d2 As Date
3: d1 = "2002/01/02"
4: d2 = #1/2/2002#
5: Debug.Print d1 = d2
6: Dim t1 As Date, t2 As Date
7: t1 = "01:02:03"
8: t2 = #1:02:03 AM#
9: Debug.Print t1 = t2
10: Dim dt1 As Date, dt2 As Date
11: dt1 = "2002/01/02 01:02:03"
12: dt2 = #1/2/2002 1:02:03 AM#
13: Debug.Print t1 = t2
14: End Sub
|
|
日付リテラルと文字列を比較するVB 6のサンプル・プログラム5 |
これを実行すると以下のようになる。つまり、日付リテラルと、文字列から変換された日付の値は同じである。
一見、文字列を使った方は自然に年月日の順に並んで分かりやすく、日付リテラルは月日年の順に並んで不自然に見えるかもしれない。しかし、文字列から変換する場合の書式は、システムの国際化関連の設定により変化し得るもので、あるパソコンで正しく日付型に変換できたものが、ほかのパソコンで正しく変換できる保証はない。その点で、日付リテラルは、システムの設定にかかわらず目的の日付時刻を確実に記述できるので、より安全である。さて、このソースをVB.NET上で動くようにしたものが以下のプログラム・コードである。
1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
2: Dim d1 As Date, d2 As Date
3: d1 = "2002/01/02"
4: d2 = #1/2/2002#
5: Trace.WriteLine(d1 = d2)
6: Dim t1 As Date, t2 As Date
7: t1 = "01:02:03"
8: t2 = #1:02:03 AM#
9: Trace.WriteLine(t1 = t2)
10: Dim dt1 As Date, dt2 As Date
11: dt1 = "2002/01/02 01:02:03"
12: dt2 = #1/2/2002 1:02:03 AM#
13: Trace.WriteLine(t1 = t2)
14: End Sub
|
|
サンプル・プログラム5をVB.NETで書き換えたサンプル・プログラム6 |
これを実行すると以下のようになる。
日付リテラルの動作は変わっていない。VB.NETでも、やはり日付リテラルを使う方が安全といえる。その点でVB 6とVB.NETの間に相違はなく、変化はない。
しかしここで問題なのは、ソース・コードの書式の違いではない。IDEで日付リテラルを入力しているとき、VB 6では年月日の順番で入力しても、システムが自動的に正しい順番に直してくれる。例えば、#2001/01/02#と入力すると、自動的に#01/02/2001#に直してくれる。しかし、VB.NETのIDEは、そのようなサービスを行ってくれず、自分で正しい順序で入力しなければならない。
もし、正しい順序を正確に把握せずにVB 6で日付リテラルを使用していた場合は、VB.NETに移行する際には、正しい順序を頭に入れておく必要がある。時刻の方は24時間制で入力しても自動的に12時間制に直してくれるようなので、こちらは問題にならないだろう。
次回予告
次回はいくつかの論理演算子と制御構造について解説したいと考えている。
では次回もまた会おう。
Insider.NET 記事ランキング
本日
月間