Delphi 7和Delphi XE4中的默认日期格式

2 delphi date delphi-7 delphi-xe4

我正在将Delphi 7应用程序迁移到Delphi XE4.DateToStr函数在两个版本中的行为都不同.

例如:

DateToStr(IncDay(Today, -9))计算结果为11/30/2013 in Delphi 7同时30/11/3013 in Delphi XE4.

这意味着,Delphi 7采用日期,mm/dd/yyyy而Delphi XE4则采用它dd/mm/yyyy.在Delphi XE4中,我可以将其设置为mm/dd/yyyy

注意:我不想在进行此转换的每个位置使用formatsettings修改代码.我只是想在一个地方做这个改变可能是Delphi XE4的一些设置文件.

Dav*_*nan 6

对于Delphi 7和Delphi XE4,一个参数重载DateToStr使用应用程序的全局格式设置.XE4实现是:

function DateToStr(const DateTime: TDateTime): string;
begin
  Result := DateToStr(DateTime, FormatSettings);
end;
Run Code Online (Sandbox Code Playgroud)

因此,它调用两个参数重载传递全局共享FormatSettings变量.

两个参数重载如下所示:

function DateToStr(const DateTime: TDateTime;
  const AFormatSettings: TFormatSettings): string;
begin
  DateTimeToString(Result, AFormatSettings.ShortDateFormat, DateTime,
    AFormatSettings);
end;
Run Code Online (Sandbox Code Playgroud)

因此,使用短日期格式.

Delphi 7的实现略有不同,但完全相同.

因此,两个版本的Delphi完全相同.它们根据全局格式设置格式化日期.这些格式设置是从用户的区域设置初始化的.从中得出唯一合理的结论是差异不是Delphi版本,而是因为您的程序不同.

很明显,我说这个问题的陈述不正确:

这意味着,Delphi 7的日期为mm/dd/yyyy,而Delphi XE4则为dd/mm/yyyy.

显然,您的两个程序具有不同的短日期格式.您需要弄清楚为什么这两个程序有不同的短日期格式来理解这种行为差异.你可以在两个Delphi版本上运行这个程序来检查我说的是正确的:

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  Writeln(DateToStr(Date));
end.
Run Code Online (Sandbox Code Playgroud)

您会发现,使用任何Delphi版本编译的程序在同一台机器上的同一用户下运行时会提供相同的输出.


现在,您想要调用函数来创建人类可读日期.而且您不想指定格式.所以你必须问问自己该计划的目的是什么.不同的人对日期的格式有不同的偏好.这是一个地区性问题.美国人喜欢把这个月放在一天之前,英国人喜欢把这个月放在前一天.而且还有更多的变化而不仅仅是这些.

当您调用DateToStr库的一个参数版本时,解释当您要求以当前用户的首选方式格式化的日期时.打电话DateToStr给一台香草英国机器,你会得到与你在美国机器上获得的不同的结果.

因此,如果您希望无论用户的偏好如何都具有始终相同的预定格式,则必须指定该格式.您可以通过更改全局FormatSettings变量或将格式传递给两个参数变量来实现DateToStr.

明确修改FormatSettings会对您的应用程序产生全局影响.您需要决定是否可取.


关键在于,日期和时间格式因地区,机器和用户而异.除非您采用其他明确的步骤,否则在格式化日期和时间时,您的输出将取决于执行代码的用户的区域设置.

  • @DavidHeffernan - 你是对的。我在不同的机器上运行 Delphi 7 和 XE4,控制面板(区域和语言选项)中的日期和时间设置不同。我在 Delphi XE4 机器上制作了 mm/dd/yyyy,问题解决了。 (2认同)