VarToDateTime(VarDateFromStr)使用哪种date格式?

最近我最近遇到了date转换的问题。 我的应用程序运行的某些工作站不能正确地将string转换为date。

我跟踪到VarDateFromStr这个问题,似乎没有检查LOCALE_SSHORTDATE进行转换。 我想知道是否有人知道它检查转换。 还是不同的行为只链接到不同的DLL版本?

GetLocaleStr(GetThreadLocale, LOCALE_SSHORTDATE, 'm/d/yy'); // returns 'dd-MM-yyyy' FormatDateTime('dd-MM-yyyy', VarToDateTime('05-11-2010')); //returns '11-05-2010' 

编辑:我已经被告知,从“dd-MM-yyyy”更改短date格式(在控制面板中),然后回到“dd-MM-yyyy”解决了这个问题。 我仍然需要validation这一点。

编辑2:Kindda忘了提,这个问题只在WinXP SP3上得到确认。

Solutions Collecting From Web of "VarToDateTime(VarDateFromStr)使用哪种date格式?"

肯, VarToDateTime函数在内部调用VarDateFromStr函数使用VAR_LOCALE_USER_DEFAULT常数格式化日期。

要确定哪些格式包含VAR_LOCALE_USER_DEFAULT您可以使用此代码

 var FormatSettings : TFormatSettings; begin GetLocaleFormatSettings(VAR_LOCALE_USER_DEFAULT, formatSettings); ShowMessage('VarToDateTime is using this format to convert dates '+formatSettings.ShortDateFormat); end; 

现在为了避免您的问题,您可以使用StrToDateTime函数将您的变体值转换为字符串,然后再将其转换为日期时间

 var v : variant; FormatSettings : TFormatSettings; Begin v:='05-11-2010';//this is your variant. FormatSettings.ShortDateFormat:='dd-mm-yyyy';//use this format in the conversion ShowMessage(FormatDateTime('dd-MM-yyyy', StrToDateTime(V,FormatSettings))); end;