我如何将“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”,则从上面的字符串转换可能会失败.在这种情况下,您最好直接从指定美国语言环境的activex单元调用VarDateFromStr:
uses sysutils,activex,comobj; var TestDate: String; DT: TDateTime; begin try TestDate := '02 August 2012 18:53'; OleCheck(VarDateFromStr(WideString(TestDate),$0409,Double(DT))); Writeln(FormatDateTime('mm/dd/yyyy hh:nn',DT)); Readln; except on E:Exception do Writeln(E.Classname,E.Message); end; end.