|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"StrToDateTime とY2K問題検証"
こんにちは、妙義のかたつむりです
2桁の数字で表された年を StrToDateTime が
2世紀をまたがって正確に識別できるかどうかを
検証するためのコードです
メモとボタンを貼り付けて実行します
実行中に現在時を変更しますので
表示が現在時に戻っていることを確認してください
もし、戻っていないときは
手動で現在時に訂正します
-----------------------
procedure TForm1.Button1Click(Sender: TObject);
procedure DoExe(TDY: word;str: string);
var
ss: string;
begin
ss:= FormatDateTime('yyyy/mm/dd', StrToDateTime(str));
memo1.lines.add(format(' TDY = %D , source = %S , dest = %S',
[TDY, str, ss]));
end;
procedure DoExeTDY(TDY: word);
begin
TwoDigitYearCenturyWindow:= TDY;
memo1.lines.add(format('now = %S',
[FormatDateTime('yyyy/mm/dd', now)]));
DoExe(TDY, '93/12/24');
DoExe(TDY, '99/12/24');
DoExe(TDY, '00/12/24');
DoExe(TDY, '05/12/24');
memo1.lines.add('');
end;
procedure DoExeSet(str: string);
var
DT: TDateTime;
ST: TSystemTime;
begin
DT := StrToDateTime(str);
with ST do begin
DecodeDate(DT, wYear, wMonth, wDay);
DecodeTime(DT, wHour, wMinute, wSecond, wMilliSeconds);
end;
try
SetLocalTime(ST);
except
raise Exception.Create(SysErrorMessage(GetLastError));
end;
DoExeTDY(0);
DoExeTDY(30);
DoExeTDY(60);
end;
var
ST: TSystemTime;
nowDT: TDateTime;
begin
// 現在時の保存
nowDT:= now;
// 現在時について実行する
DoExeSet(FormatDateTime('yyyy/mm/dd hh:mm:ss', now));
// 現在時を変更して実行する
DoExeSet('2000/01/01 12:12:12');
DoExeSet('2020/12/24 12:12:12');
// 現在時にもどす
with ST do begin
DecodeDate(nowDT, wYear, wMonth, wDay);
DecodeTime(nowDT, wHour, wMinute, wSecond, wMilliSeconds);
end;
try
SetLocalTime(ST);
except
raise Exception.Create(SysErrorMessage(GetLastError));
end;
TwoDigitYearCenturyWindow:= 0;
memo1.lines.add(format('--- now = %S 現在時に戻ってますか?---',
[FormatDateTime('yyyy/mm/dd hh:mm:ss', now)]));
end;
99/12/24(金) 11:33 妙義のかたつむり(QWK05270) __@ノ'
Original document by 妙義のかたつむり氏 ID:(QWK05270)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|