gpt4 book ai didi

delphi - 在 Delphi 中将 TDateTime 声明为 Const

转载 作者:行者123 更新时间:2023-12-03 14:33:34 25 4
gpt4 key购买 nike

据我所知,没有办法做到这一点,但我会询问,以防其他人知道如何做到这一点。在 Delphi 中如何将日期声明为常量?

我发现的唯一解决方案是使用数字等价物,维护起来有点痛苦,因为它不是人类可读的。

const
Expire : TDateTime = 39895; // Is actually 3/23/2009

我希望能够做的是这样的:

const
Expire : TDateTime = TDateTime ('3/23/2009');

const
Expire : TDateTime = StrToDate('3/23/2009');

所以请告诉我这是否是一个功能请求,或者我是否只是错过了如何执行此操作(是的,我知道这似乎是一件奇怪的事情......)

最佳答案

好吧,我的 react 有点晚了,但这是针对较新的 Delphi 的解决方案。

它使用隐式类重载器,以便可以像使用 TDateTime 变量一样使用此类型的记录。

  TDateRec = record
year,month,day,hour,minute,second,millisecond:word;
class operator implicit(aDateRec:TDateRec):TDateTime;
class operator implicit(aDateTime:TDateTime):TDateRec; // not needed
class operator implicit(aDateRec:TDateRec):String; // not needed
class operator implicit(aDateRec:String):TDateRec; // not needed
end;

实现:

uses DateUtils;

class operator TDateRec.Implicit(aDateRec:TDateRec):TDateTime;
begin
with aDateRec do // Yeah that's right you wankers. I like "with" :)
Result := encodeDateTime(Year,Month,Day,Hour,Minute,Second,Millisecond);
end;

class operator TDateRec.Implicit(aDateTime:TDateTime):TDateRec;
begin
with Result do
DecodeDateTime(aDateTime,Year,Month,Day,Hour,Minute,Second,Millisecond);
end;

class operator TDateRec.Implicit(aDateRec:TDateRec):String;
begin
Result := DateTimeToStr(aDateRec)
end;

class operator TDateRec.Implicit(aDateRec:String):TDateRec;
begin
Result := StrToDateTime(aDateRec)
end;

现在您可以像这样声明日期:

const
Date1:TDateRec=(Year:2009;month:05;day:11);
Date2:TDateRec=(Year:2009;month:05;day:11;hour:05);
Date3:TDateRec=(Year:2009;month:05;day:11;hour:05;minute:00);

要查看它是否有效,请执行以下命令:

ShowMessage(Date1); // it can act like a string
ShowMessage(DateToStr(Date1)); // it can act like a date

如果您确实想用它替换所有 TdateTime 变量,您可能还需要重载其他一些运算符(加、减、显式……)。

关于delphi - 在 Delphi 中将 TDateTime 声明为 Const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/675556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com