http://www.cnblogs.com/hnxxcxg/archive/2013/01/30/2882672.html
如果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;
procedure TForm1.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; procedure TForm1.UpdateSysDateTime; var systemtime:Tsystemtime; DateTime:TDateTime; begin //1、修改前时间 GetLocalTime(SystemTime); //读取系统时间 DateTime:=SystemTimeToDateTime(SystemTime); //把API的TSystemTime格式 转化为 Delphi的TDateTime格式 Edit3.Text:=DateTimeToStr(DateTime); //显示当前系统的时间 //2、要修改的时间 DateTime:=StrToDateTime(Edit1.text); //获得时间(TDateTime格式) DateTimeToSystemTime(DateTime,systemtime); //把Delphi的TDateTime格式转化为API的TSystemTime格式 SetLocalTime(SystemTime); //设置系统时间 //3、修改后的时间 GetLocalTime(SystemTime); //读取系统时间 DateTime:=SystemTimeToDateTime(SystemTime); //把API的TSystemTime格式 转化为 Delphi的TDateTime格式 Edit2.Text:=DateTimeToStr(DateTime); //显示当前系统的时间 end; procedure TForm1.FormCreate(Sender: TObject); begin SetSysDateFormat; end; procedure TForm1.Button1Click(Sender: TObject); begin UpdateSysDateTime; end;