Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi inifiles ReadDateTime_Delphi_Delphi Xe_Ini - Fatal编程技术网

Delphi inifiles ReadDateTime

Delphi inifiles ReadDateTime,delphi,delphi-xe,ini,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('Mai

其实质是:

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 7 Enterprise imk 32,Embarcadero Delphi XE Portable

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

两个看起来最自然的选择:

  • 使用
    TDateTime
    的底层表示形式存储为浮点值
  • 使用预先确定的格式存储为文本
  • 对于选项1,您需要确保使用预先确定的十进制分隔符,以避免出现与现在完全相同的问题!这意味着您需要在
    TDateTime
    string
    之间执行自己的转换,因为
    WriteFloat
    ReadFloat
    方法使用依赖于区域设置的全局格式设置。
    SysUtils
    中存在接受格式设置参数的
    FloatToStr
    StrToFloat
    重载

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


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

    WriteDateTime
    ReadDateTime
    在转换为字符串或从字符串转换为字符串时使用应用程序
    FormatSettings
    属性。我不知道为什么这在您的情况下不起作用,但我总是尽量避免将数据写入一个文件,该文件的格式可能会因语言环境的不同而被误解。最佳做法是使用ISO格式。Delphi XE Portable不是Embarcaderoi的有效版本。将来,我将加密该文件,以便用户无法编辑它,如果他们尝试编辑,则此程序将不会使用错误的设置。谢谢,我将查看第二个选项。使用前面指定的FormatSetString将date转换为字符串,并在文件中写入此行,效果相反。因此,我可能排除了每个用户的所有本地设置