如果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;
|
请发表评论