Delphi inifiles ReadDateTime

时间:2013-12-06 08:30:34

标签: delphi delphi-xe ini

以下内容:

procedure TForm1.Button1Click(Sender: TObject);
var
  cfile: TInifile;
  Date1: TDateTime;
begin
  Date1 := IncYear(Now, -50);
  cfile := TInifile.Create(ExtractFilePath(Application.ExeName) + 'Settings.ini');
  try
    cfile.WriteDateTime('Main', 'DateTime', Date1);
    ShowMessage('Recorded in the ini file ' + DateTimeToStr(Date1));
    Date1 := cfile.ReadDateTime('Main', 'DateTime', Now);
    ShowMessage('Read from ini file ' + DateTimeToStr(Date1));
  finally
    cfile.Free;
  end;
end;

ini文件中的条目没有问题。在文件中写入04-Dec-63 17:28:14。从ini文件中读取也不起作用,消息“04-Dec-63 17:28:14不是有效的日期和时间”。

Windows 7Enterpriseх32,Embarcadero Delphi XE Portable

1 个答案:

答案 0 :(得分:4)

您已将日期/时间作为文字写入文件。并使用创建该文件的用户的区域设置对其进行格式化。您注定无法可靠地读取此文件,因为不同的用户具有不同的区域设置。您需要为不依赖于区域设置的日期使用强大的格式。

看似最自然的两个选项:

  1. 使用TDateTime的基础表示形式存储为浮点值。
  2. 使用预先确定的格式存储为文本。
  3. 对于选项1,您需要确保使用预先确定的小数分隔符以避免现在遇到的完全相同的问题!这意味着您需要在TDateTimestring之间执行自己的转换,因为WriteFloatReadFloat方法使用的是与语言环境相关的全局格式设置。 FloatToStr中有StrToFloatSysUtils的重载接受格式设置参数。

    对于选项2,RTL包含使用指定格式执行日期/时间转换的各种功能。 DateTimeToStr中有StrToDateTimeSysUtils的重载接受格式设置参数。

    如果您希望文件易于人类阅读或编辑,则首选选项2。