代码之家  ›  专栏  ›  技术社区  ›  Ken Bourassa

vartodatetime(vardatefromstr)使用哪种日期格式?

  •  1
  • Ken Bourassa  · 技术社区  · 14 年前

    最近我在日期转换方面遇到了一些问题。我的应用程序运行的某些工作站无法正确地将字符串转换为日期。

    我跟踪到vardatefromstr这个问题,它似乎没有检查locale的sortdate来进行转换。我想知道是否有人知道它检查了转化率。或者不同的行为只链接到不同的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”更改为 无论什么 回到“dd-mm-yyyy”解决了这个问题。不过我还是要核实一下。

    edit2:kindda忘记提了,这个问题只在winxp sp3上得到了确认。

    1 回复  |  直到 14 年前
        1
  •  3
  •   RRUZ    14 年前

    VarToDateTime 函数内部调用 VarDateFromStr 函数wich使用 VAR_LOCALE_USER_DEFAULT 设置日期格式的常量。

    要确定wich格式,请包含 变量区域设置用户默认值 您可以使用此代码

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

    现在,为了避免出现问题,可以使用strTodateTime函数将变量值转换为字符串,然后转换为datetime。

    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;