お知らせ

電子会議

ライブラリ

FDelphi サイト全文検索

Delphi FAQ一覧

サンプル蔵



FDelphi FAQ
15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」

[Q]
WindowsNT4.0上で、FormatDateTimeを使用して和暦変換を行うと、 不正な値が返ります。 例えば、FormatDateTime('gggee/mm/dd', d) とした場合、 dが1989/01/01の場合、昭和64/01/01、 dが1989/01/08の場合、平成01/01/08、 dが1989/01/31の場合、平成01/01/31、 dが1989/02/01の場合、昭和64/02/01、 dが1989/02/08の場合、平成01/02/08となってしまいます。

[A]
WindowsNT4.0のAPIに、和暦を正しく計算しないバグ(元号の区切りがある月以降の
月の元号が、上記例のように狂ってしまう)があるため、APIの戻り値をそのまま使
用するDelphi3.0では、もろにバグの影響が出ます。

したがって、WindowsNT4.0で動作するプログラムを作成する場合、
下記例のような修正を加えて下さい。

(例)TDateTime型の日付を与えると、
      元号2文字+和暦2桁+'/'+月2桁+'/'+日2桁の文字列を返す関数

function GetWareki(d: TDateTime): string;
var
  yy, mm, dd: word;           //  DecodeDate用年月日(西暦)
begin

    //  本来はこの1行だけでOKな筈
  Result := FormatDateTime('gggee/mm/dd', d);

    //  しかしNT4.0のバグのため、次のような修正が必要
  DecodeDate(d, yy, mm, dd);
  if (yy = 1868) and (mm > 9) then Result := '明治01' + Copy(Result, 7, 6);
  if (yy = 1912) and (mm > 7) then Result := '大正01' + Copy(Result, 7, 6);
  if (yy = 1989) and (mm > 1) then Result := '平成01' + Copy(Result, 7, 6);

end;


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。

Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会