让delphi程序不受WINDOWS日期格式的影响

如果WINDOWS系统的短日期格式为“yyyy/m/d”,执行下面的代码会报错:2013-01-29 00:00:00不是合法的日期

procedure TFrmQuerySale.FormShow(Sender: TObject);
var
  sDate: string;
begin
  inherited;
  // 默认查当天的销售数据
  sDate := FormatDateTime('yyyy-mm-dd', Now);
  DateTimePicker1.DateTime := StrToDateTime(sDate + ' 00:00:00');
  DateTimePicker2.DateTime := StrToDateTime(sDate + ' 23:59:59');
  Find(Trim(edtBillId.Text), DateTimePicker1.DateTime, DateTimePicker2.DateTime);
  edtBillId.SetFocus;
end;

如何解决?

procedure TdmCommonFun.SetSysDateFormat;
begin
  // 设置WINDOWS系统的短日期的格式
  SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, 'yyyy-MM-dd');
  Application.UpdateFormatSettings := False;
  // 设定程序本身所使用的日期时间格式
  LongDateFormat := 'yyyy-MM-dd';
  ShortDateFormat := 'yyyy-MM-dd';
  LongTimeFormat := 'hh:nn:ss';
  ShortTimeFormat := 'hh:nn:ss';
  DateSeparator := '-';
  TimeSeparator := ':';
end;

在程序初始化的时候执行上面的代码,不论WINDOWS的短日期格式怎样设置都不再影响DELPHI程序。

 xe2以上版本,代码得改改:

procedure SetSysDateFormat;
var  
  fs: TFormatSettings;
begin  
  // 设置WINDOWS系统的短日期的格式  
  SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, 'yyyy-MM-dd');
  Application.UpdateFormatSettings := False;  
  // 设定程序本身所使用的日期时间格式  
  fs.LongDateFormat := 'yyyy-MM-dd';  
  fs.ShortDateFormat := 'yyyy-MM-dd';  
  fs.LongTimeFormat := 'hh:nn:ss';  
  fs.ShortTimeFormat := 'hh:nn:ss';  
  fs.DateSeparator := '-';  
  fs.timeSeparator := ':';
end;

 

你可能感兴趣的:(Delphi)