お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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