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


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;

联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678