让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;

引自:

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;