其实质如下:
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文件中的条目顺利通过。在文件中写入63-Dec-63 17:28:14。从ini文件中读取也不起作用,消息显示为“ 04-Dec-63 17:28:14无效的日期和时间”。
Windows 7企业版х32,Embarcadero Delphi XE Portable
最佳答案
您已将日期/时间以文本形式写入文件。并使用创建该文件的用户的语言环境设置对其进行格式化。由于不同的用户具有不同的区域设置,您注定无法可靠地读取此文件。您需要为日期不依赖于语言环境使用可靠的格式。
看起来最自然的两个选项:
使用TDateTime
的基础表示形式存储为浮点值。
使用预定格式存储为文本。
对于选项1,您需要确保使用预定的十进制分隔符,以避免出现与现在完全相同的问题!这意味着您将需要在TDateTime
和string
之间执行自己的转换,因为WriteFloat
和ReadFloat
方法使用的是区域设置相关的全局格式设置。 FloatToStr
中的StrToFloat
和SysUtils
重载接受格式设置参数。
对于选项2,RTL包含使用指定格式执行日期/时间转换的各种功能。 DateTimeToStr
中的StrToDateTime
和SysUtils
重载接受格式设置参数。
如果您希望文件易于被人阅读或编辑,则首选选项2。