この資料は以下のエディションについて説明したものです。
Enterprise、Professional および Standard
Edition
このツールで
「マイクロソフト西暦 2000
年対応」に準拠するアプリケーションを構築できますか ?
可能。
データの対応期間
下 2 桁の西暦に対して既定の規則で処理する場合は 1900 年代のみ。
日付の処理
1999 年を超える西暦が 4
桁形式の場合は、そのまま処理されます。
下 2 桁の西暦の処理
システム時刻と同じ年代として 4
桁に変換されます。使用される関数に依存して、Visual Basic 4.0 (16ビット版)
は、オートメーション ライブラリ (16 ビット版) またはランタイム
ライブラリのいずれかの既定に基づいて日付を変換します。オートメーション ライブラリ (16 ビット版)
は、Visual Basic 4.0
の出荷以後、変更されていません。そのため、どちらの日付関数が使用されても動作は同じです。
西暦2000年問題に対応するアプリケーションの開発について
Visual Basic
の既定の動作とは異なる独自の設定を持つプログラムを作成することが可能です。たとえば、下 2
桁の西暦のみを指定して、00 〜 49 は 2000 〜 2049 年、50 〜 99 は 1950 〜
1999 年に対応させることができます。
詳細な情報については、ホワイト ペーパー "Microsoft
Visual Basic での西暦 2000 年対応アプリケーションの開発" および "Visual
Basic アプリケーションの 2000 年への対応" を参照してください。
プログラム開発における一般的な西暦2000年問題について
ホワイト ペーパー "Microsoft
Visual Basic での西暦 2000 年対応アプリケーションの開発" および "Visual
Basic アプリケーションの 2000 年への対応"
を参照してください。
このツールを使用したプログラム開発におけるその他の問題
コード
エディタの機能に、システム日付に依存して発生する問題があります。4 桁で入力したの 1900 年代の日付リテラル
(例 : d = #10/7/1997#) は、行が確定する時点で下 2 桁の西暦に切り詰められます(例 :
d= #10/7/97#)。このコードをシステム時刻が西暦 2000 年以降のマシン環境で参照すると、日付が 2000 年代に属するものと解析し直されます (例 : d= #10/7/2097#)。また、システム時刻が西暦 2000 年以降の環境では 1900 年代の日付を日付リテラルとして正しく表すことができません。
注意 : この現象はデザイン環境のみに該当します。コンパイルされたアプリケーションには影響はなく、テキスト ベースのソース コードだけが影響を受けます。この区別はとても重要であり、プログラム開発者は この違いを理解する必要があります。つまり、この問題は Visual Basic 4.0 (16 ビット版) アプリケーションのコードの開発や保守の担当者だけに関係があり、開発されたアプリケーションを使用するエンド ユーザーには関係ありません。他バージョンの Visual Basic には、この問題はありません。
状況 1: システム時刻が 2000/1/1 を過ぎてから既存のコードを編集する場合
西暦 1900 年代に日付リテラルとして #10/7/1998#
を入力すると、Visual Basic により下 2 桁が切り詰められ、以下のようにソース コードが残ります。
Function CalculatePorfolioPerformaceSinceStart
Const PORFOLIO_START_DATE = #10/7/98#
End Function
西暦 2000 年になってから、開発者はプロジェクトのバージョンアップを依頼されたとします。作業のためにプロジェクトを開いてソースコードを参照すると、日付は再解析され、次のような日付に自動的に変更されてしまいます。
Function CalculatePorfolioPerformaceSinceStart
Const PORFOLIO_START_DATE = #10/7/2098#
End Function
状況 2: システム時刻が 2000/1/1 を過ぎてから 1900 年代の日付を入力する場合
西暦 2000 年以降に日付リテラルとして
#10/7/1998# を入力すると、Visual Basic により下 2 桁が切り詰められ、以下のようにソース コードが残ります。
Const PORFOLIO_START_DATE = #10/7/98#
このプロジェクトを保存し、あとで開きなおすと日付が次のように変更されてしまいます。
Const PORFOLIO_START_DATE = #10/7/2098#
コード エディタの修正プログラム
この修正プログラムにより、以下のように改善されます。
- 開発者がコード
ウィンドウに日付定数を入力すると、その日付定数は 4 桁の西暦として表示、保存されます。下 2 桁に切り詰められることはありません。(例 : Const SOME_DATE = #10/7/1998#。)
- 下 2
桁の西暦の日付定数が含まれる既存のコードをロードすると、その日付定数は 1900 年代の 4 桁の西暦に解析され、表示されます。コードを再保存するときには 4 桁の西暦で保存されます。(例 : Const SOME_DATE = #10/7/98# は SOME_DATE = #10/7/1998# になります。)
この修正プログラムの適用により 西暦 2000 年以降も、日付リテラルを開発者の作成したコードのままで処理できるようになります。修正プログラムは、1999 年 4 月にリリースされた VBA2.DLL のアップデート バージョンに含まれています。くり返しますが、この問題はエンド ユーザーや、コンパイル済のアプリケーションには影響はなく、統合開発環境におけるデザイン時のみ影響を受けるものです。
詳細および修正プログラムのダウンロードについては、以下のサイトを参照してください。
http://msdn.microsoft.com/vbasic/downloads/y2kreadme/jpn/VB4Y2kReadme.asp
テスト時のガイドラインと推奨事項
次に示すサンプル コードでは、cmdConvertDate をクリックすると
txtDate という名前のテキストボックスに入力されたデータが評価されます。日付の年数部が下 2
桁の西暦で入力されていると、サンプルの規則に従い 4
桁の西暦を使用する日付に変換されます。次に、最初に入力された日付と、サンプルの規則に従い変換された 4
桁の西暦、および Visual Basic の既定の設定により変換された 4
桁の西暦が表示されます。
最後に、txtDate
に表示された日付は、適切な 4 桁の西暦が付加されて、確定した日付に変換されます。
このコードでは、日付を yy/mm/dd
の形式で入力する必要がありますが、これ以外の形式にも簡単に変更できます。
Private Sub
cmdConvertDate_Click() Dim strYear As String Dim
intSlash As Integer If IsDate(txtDate) or txtDate =
"2/29/00" Then '最初の日付の区切り文字を検索します。 intSlash =
InStr(txtDate, "/") If intSlash > 0 Then '2
番目の日付区切り文字を検索します。 intSlash = InStr(intSlash + 1,
txtDate, "/") If intSlash > 0
Then '日付から西暦を抽出します。 strYear = Mid(txtDate,
intSlash + 1) If Len(strYear) = 2 Then If
CInt(strYear) < 50 Then ' 50 未満の場合、年は 2000
年代になります。 strYear = "20" & strYear Else '50
以上の場合、年は 1900 年代になります。 strYear = "19" &
strYear End If End If MsgBox "入力した日付 : " &
txtDate MsgBox "西暦 (ここでのルール): " &
strYear MsgBox "西暦 (VB のデフォルト値): " &
Year(txtDate) Else MsgBox
"日付は予期した形式ではありません!" End If Else MsgBox
"日付は予期した形式ではありません!" End If Else MsgBox
"有効な日付ではありません!" End If 'txtDate
の日付を明確にします。 txtDate.Text = Left(txtDate.Text,
intSlash) & strYear End Sub
|