如何将“2012 年 8 月 2 日 18:53”转换为 DateTime?

当我使用 StrToDate 进行转换时,它发生错误“日期格式无效”

最佳答案

您可以使用 VarToDateTime(在 Variants 单元中找到),它支持 Delphi 的 RTL 不支持的各种时间格式。 (它基于 COM 的日期支持例程,如各种 Microsoft 产品中使用的那些例程。)我使用您提供的日期进行了测试,它确实正确地将其转换为 TDateTime。在 Delphi 2007 和 XE2 上测试。

program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  SysUtils, Variants;


var
  DT: TDateTime;
  TestDate: String;

begin
  TestDate := '02 August 2012 18:53';

  try
    DT := VarToDateTime(TestDate);
    { TODO -oUser -cConsole Main : Insert code here }
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
  Writeln(FormatDateTime('mm/dd/yyyy hh:nn', DT));
  Readln;
end.

当前 documentation 中的更多信息,包括另一个使用示例(该页面底部的链接)。

请注意 Variants 单元中的函数使用默认用户语言环境。如果不是 'US',则上述字符串的转换可能会失败。在这种情况下,您最好直接从指定美国语言环境的 VarDateFromStr 单元调用 activex:
uses
  sysutils, activex, comobj;

var
  TestDate: String;
  DT: TDateTime;
begin
  try
    TestDate := '02 August 2012 18:53';
    OleCheck(VarDateFromStr(WideString(TestDate), $0409, 0, Double(DT)));
    Writeln(FormatDateTime('mm/dd/yyyy hh:nn', DT));
    Readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

关于delphi - 如何将字符串转换为日期时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11782114/

10-12 17:00
查看更多