这是 that question 的跟进.
正如所问,当 VAR_LOCALE_USER_DEFAULT 作为参数提供时,是什么导致 VarDateFromStr(来自 Oleaut32.dll)无法使用当前用户的区域设置?
因此,我们的应用程序遇到了很多问题。
在有问题的系统上,如果我们执行以下代码:
procedure TForm1.Button3Click(Sender: TObject);
var V : Variant;
dte : TDateTime;
begin
V := Label28.Caption;
dte := VarAsType(V,varDate) ; //Implicitly calls VarDateFromStr
V := dte;
Label28.Caption := V; //Implicitly calls VarBStrFromDate
end;
Label28 以标题“11-05-2010”开头,每次调用之间标题将从 11-05-2010 交替为 05-11-2010。
在给定系统上,GetLocaleStr(GetThreadLocale, LOCALE_SSHORTDATE, 'm/d/yy') 返回“dd-MM-yyyy”(当前用户的短日期格式)
问题发生在 WinXP SP3 上。 (虽然我们的应用程序未在任何其他操作系统版本上使用,但不能说它是否特定于该版本)。
我最初的想法是它可能与安全相关(用户的安全性是密不可分的),但我还无法证明这一点。
最佳答案
可能的答案是用户的默认语言环境不是您的特定 o/s 实例支持的 lcid。
解决方法很简单 - 只是不要使用难看的变体。请尝试使用 DateTimeToString。 附言还有助于指定您的 Delphi 版本。
关于windows - 当 VAR_LOCALE_USER_DEFAULT 作为参数提供时,是什么导致 VarDateFromStr 无法使用当前用户的区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4208179/