IniFileで日時を読み書きするときはグローバル変数FormatSettingsの値に注意する

環境はDelphi 10.1 Berlin。

TIniFileやTMemIniFileで日時を保存したり、保存した日時を読み込むには、WriteDate/WriteTime /WriteDateTime/ReadDate/ReadTime/ReadDateTimeメソッドを使用します。

問題は、これらのメソッドが内部で次の関数を使用していることです。

function System.SysUtils.DateToStr(const DateTime: TDateTime): string;
function System.SysUtils.TimeToStr(const DateTime: TDateTime): string;
function System.SysUtils.DateTimeToStr(const DateTime: TDateTime): string;
function System.SysUtils.StrToDate(const S: string): TDateTime;
function System.SysUtils.StrToTime(const S: string): TDateTime;
function System.SysUtils.StrToDateTime(const S: string): TDateTime;

いずれもグローバル変数FormatSettingsに依存しており、OSの言語・日時の設定が変わると、返値の値が変わります。
そのため、保存した日時を読み込めなくなる可能性があります。

TIniFileやTMemIniFileを使うときは、グローバル変数FormatSettingsの値に注意しておく必要があります。

上記の関数には引数にTFormatSettingsをとる関数も用意されています。
TIniFileやTMemIniFileを継承して日時を扱うメソッドをオーバーライドするのもいいかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください