讓delphi程式不受WINDOWS日期格式的影響

沧江魅影發表於2024-08-15

如果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程式不受WINDOWS日期格式的影響 - delphi中介軟體 - 部落格園 (cnblogs.com)

相關文章