• 让delphi程序不受WINDOWS日期格式的影响


    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;

    procedure TForm1.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;
    
    procedure TForm1.UpdateSysDateTime;
    var
      systemtime:Tsystemtime;
      DateTime:TDateTime;
    begin
      //1、修改前时间
      GetLocalTime(SystemTime);   //读取系统时间
      DateTime:=SystemTimeToDateTime(SystemTime);   //把API的TSystemTime格式   转化为   Delphi的TDateTime格式
      Edit3.Text:=DateTimeToStr(DateTime);   //显示当前系统的时间
      //2、要修改的时间
      DateTime:=StrToDateTime(Edit1.text);   //获得时间(TDateTime格式)
      DateTimeToSystemTime(DateTime,systemtime);   //把Delphi的TDateTime格式转化为API的TSystemTime格式
      SetLocalTime(SystemTime);   //设置系统时间
      //3、修改后的时间
      GetLocalTime(SystemTime);   //读取系统时间
      DateTime:=SystemTimeToDateTime(SystemTime);   //把API的TSystemTime格式   转化为   Delphi的TDateTime格式
      Edit2.Text:=DateTimeToStr(DateTime);   //显示当前系统的时间
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      SetSysDateFormat;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      UpdateSysDateTime;
    end;
    

      

  • 相关阅读:
    实现基于C++的动态事件机制(转)
    D3D HLSL 一段代码注释
    directx加载ms3d动画模型
    几种空间分割算法研究之bsp
    IxEngine开发笔记
    使用UVAtlas技术管理贴图
    八叉树
    c#调用C++写的dll导出类,包含继承,重载等详细介绍(转载)
    给自己毕业前的一点任务
    大小端问题
  • 原文地址:https://www.cnblogs.com/tc310/p/4599865.html
Copyright © 2020-2023  润新知