date1:=strtodate('2001-05-01');
这句代码在XP运行得好好得,一到Vistal上就出错“2001-05-01不是一个正确的日期!”
我就纳闷了,这都不是正确的日期,那啥是正确的日期啊???我把2001-05-01改成2001-5-1也不行。
高手啊大侠啊,救救俺吧,客户要我交货呢,就卡在这条命令上了。

解决方案 »

  1.   

      try
        date1:=strtodate('2001-05-01');
      except
        date1:=strtodate('2001/05/01');
      end;
      

  2.   

    是不是Delphi版本太低了?
    用formatdatatime之类的试试
      

  3.   

    一般不推荐用这样的语句,除非你保证全世界的人都用一样的操作系统,一样的设置日期时间格式,
    比较推荐的是用:  DecodeDate();
      EncodeDate();
      TryEncodeDate();这样的函数来用。
      

  4.   

    自己指定日期格式啦
    TFormatSetting
      

  5.   

    不只是vista,win7也一样,而且不同OEM版本的系统情况还不同。这个问题使用delphi函数会出的,就算这个系统没问题在另外的vista系统也有问题,最好的方法就是自己做一个转换函数。我之前也为这个问题专门写了个函数,不过我使用的格式是统一的,所以这个函数很好写,建议你也自己写一个,你也应该是一个统一格式的时间吧。
      

  6.   

    参考var  
      settings: TFormatSettings;
      dt: TDateTime;
    begin  GetLocaleFormatSettings(GetUserDefaultLCID, settings);
      settings.DateSeparator := '-';
      settings.TimeSeparator := ':';
      settings.ShortDateFormat := 'yyyy-mm-dd';
      settings.ShortTimeFormat := 'hh:nn:ss';  dt:= strToDateTime('2010-3-19 08:09:10',settings);end;
      

  7.   

    var  
      settings: TFormatSettings;
      dt: TDateTime;
    begin  GetLocaleFormatSettings(GetUserDefaultLCID, settings);
      settings.DateSeparator := '-';
      settings.TimeSeparator := ':';
      settings.ShortDateFormat := 'yyyy-mm-dd';
      settings.ShortTimeFormat := 'hh:nn:ss';  dt:= strToDateTime('2010-3-19 08:09:10',settings);end;
      

  8.   


    难道这个就是传说中的“人品导致Bug”的范例?