让delphi程序不受WINDOWS日期格式的影响(使用SetLocaleInfo函数和Application.UpdateFormatSettings)
Posted 朝闻道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让delphi程序不受WINDOWS日期格式的影响(使用SetLocaleInfo函数和Application.UpdateFormatSettings)相关的知识,希望对你有一定的参考价值。
如果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
以上是关于让delphi程序不受WINDOWS日期格式的影响(使用SetLocaleInfo函数和Application.UpdateFormatSettings)的主要内容,如果未能解决你的问题,请参考以下文章
Delphi Xe 中如何把日期格式统一处理,玩转 TDatetime
不修改系统日期和时间格式,解决Delphi报错提示 '****-**-**'is not a valid date and time