冥界3大法王 发表于 2021-9-19 10:22

为啥得到的日期与实际不符?



unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls;

type
TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

uses
IniFiles;

procedure TForm1.Button1Click(Sender: TObject);
var
inifile: TIniFile;      //定义ini文件
Filename: string;         //其文件名类型

Keyword4: TDateTime;


begin
Filename := GetCurrentDir + '\配置.ini';
inifile := TIniFile.Create(PChar(Filename));
inifile.WriteDate('小节名1', '关键字4', 2021-8-8);
Keyword4 := inifile.ReadDate('小节名1', '关键字4', Keyword4);
ShowMessage(DateToStr(Keyword4));
end;

end.

Jack2002 发表于 2021-9-19 11:28

本帖最后由 Jack2002 于 2021-9-19 11:34 编辑

代码简单,没写注释,字符串转日期函数可使用StrToDate(String)。
var
inifile: TIniFile;      //定义ini文件
Filename: string;         //其文件名类型
Keyword4: TDateTime;
begin
Filename := GetCurrentDir + '\配置.ini';
inifile := TIniFile.Create(PChar(Filename));

inifile.WriteDate('小节名1', '关键字4', Date());
inifile.WriteDate('小节名1', '关键字5', EncodeDate(2021, 08, 08));

Keyword4 := inifile.ReadDate('小节名1', '关键字4', Keyword4);
ShowMessage(DateToStr(Keyword4));

Keyword4 := inifile.ReadDate('小节名1', '关键字5', Keyword4);
ShowMessage(DateToStr(Keyword4));
end;

lies2014 发表于 2021-9-19 14:28

本帖最后由 lies2014 于 2021-9-19 14:33 编辑

只改一句就可以了,其实就是数据类型转换的问题:
inifile.WriteDate('小节名1', '关键字4', StrToDate('2021-8-8'));

yulinsoft 发表于 2021-9-19 16:59

冥界3大法王 发表于 2021-9-19 17:32

yulinsoft 发表于 2021-9-19 16:59
为啥不用WriteString?通用性更好,ini本身就是文本文件,日期类型本质是浮点数,你的写法我也是第一次见。

开始最早吧,我就觉得会写文本型好像就够了,一看书原来有6种类型
于是我就蛋痛的试了试,书上的写法,不过觉得搞复杂了。

Jack2002 发表于 2021-9-19 19:42

冥界3大法王 发表于 2021-9-19 17:32
开始最早吧,我就觉得会写文本型好像就够了,一看书原来有6种类型
于是我就蛋痛的试了试,书上的写法, ...

不复杂,这么搞肯定是有好处的,写入时如果确定格式不会出错就用WriteString,省去了转换操作,读入时可以ReadDate,也是免去了转换的操作,封装的目的就是为了使用更方便,并不是没用的!
页: [1]
查看完整版本: 为啥得到的日期与实际不符?