让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 设置时间格式

STM32中怎样让自己指定部分程序不受系统复位的影响?

Delphi Xe 中如何把日期格式统一处理,玩转 TDatetime

根据 ADO 提供程序格式化日期

不修改系统日期和时间格式,解决Delphi报错提示 '****-**-**'is not a valid date and time

Delphi 编写的程序中,如何让程序实现像Windows7一样的毛玻璃效果?