我如何将str转换为datetime?

Sad*_*deh 3 delphi datetime date

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

当我使用StrToDate进行转换时,会出现错误'无效的日期格式'

Ken*_*ite 8

您可以使用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.
Run Code Online (Sandbox Code Playgroud)

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


请注意,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.
Run Code Online (Sandbox Code Playgroud)

  • @Ken - 就是这样,VarToDateTime导致使用LOCALE_USER_DEFAULT调用'VarDateFromStr'的路径.如果用户区域设置不是US(或兼容),则会发生类型不匹配.介意我编辑你的答案吗? (2认同)