"LongMonthNames" 无法识别变量?

"LongMonthNames" variable not recognized?

我的单元中有此代码:

unit clsDate_u;

interface
type
   TDate = class(TObject)
     private
          fDay, fMonth, fYear : integer;
     public
        constructor Create(sDate: string);
        function MonthName: string;
        function DaysPassedInYear: integer;
        function LongDate: string;
        function GetDay: integer;
        function GetMonth: integer;
        function GetYear: integer;
    end;
implementation

{ TDate }
uses
  SysUtils, DateUtils;

constructor TDate.Create(sDate: string);
begin
  fDay := StrToInt(copy(sDate,1,2));
  fMonth := StrToInt(copy(sDate,4,2));
  fYear := StrToInt(copy(sDate,7,2));
  if fYear <= 29 then
     fYear := fYear + 2000
  else
     fYear := fYear + 1900;
end;

function TDate.DaysPassedInYear: integer;
var
  iTotal, iCount: integer;
begin
  iTotal := 0;
  iCount := 1;
  while iCount < fMonth do
   begin
    iTotal := iTotal + DaysInAMonth(fYear, iCount);
    Inc(iCount);
   end;
  iTotal := iTotal + fDay;
  result := iTotal;
end;

function TDate.GetDay: integer;
begin
   result := fDay;
end;

function TDate.GetMonth: integer;
begin
   result := fMonth;
end;

function TDate.GetYear: integer;
begin
   result := fYear;
end;

function TDate.MonthName: string;
begin
   result := LongMonthNames[fMonth];
end;

function TDate.LongDate: string;
begin
   result := IntToStr(fDay) + ' ' + MonthName + ' ' + IntToStr(fYear);
end;

end.

我想在我的函数中使用“LongMonthNames”变量,您可以在此处看到:

function TDate.MonthName: string;
begin
   result := LongMonthNames[fMonth];
end;

Delphi 说这是一个未声明的标识符并将其视为错误,但实际上我确实在我的 uses 子句中添加了 SysUtils 和 DateUtils。

为什么它无法识别“LongMonthNames”?

我在一个单独的单位工作,但我怀疑这与问题有任何关系。

首先,TDate 是一个糟糕的名字,因为它与标准 Delphi TDate 类型冲突。

其次,您要查找的 LongMonthNamesTFormatSettings 记录的成员。因此,要访问此成员,您需要此类记录的实例。

例如,如果您想要本地化的月份名称,您可以使用 TFormatSettings.Create 为当前区域设置创建格式设置记录。

另一方面,如果您想要 non-localized(英文)月份名称,您可以使用 TFormatSettings.Invariant class 函数。

例如,

var LMonthNames := TFormatSettings.Create.LongMonthNames;
for var LMonthName in LMonthNames do
  ShowMessage(LMonthName);

为您提供本地化的月份名称,而

var LMonthNames := TFormatSettings.Invariant.LongMonthNames;
for var LMonthName in LMonthNames do
  ShowMessage(LMonthName);

给你non-localized个月的名字。

(显然,在实际代码中您不会每次都重新创建格式设置记录。)

我所要做的就是添加“FormatSettings”。在“LongMonthNames”之前,像这样:

function TDate.MonthName: string;
begin
   result := FormatSettings.LongMonthNames[fMonth];
end;