DELPHI中關於系統日期格式及程式處理

2021-08-25 07:00:10 字數 1968 閱讀 8175

delphi呼叫strtodatetime時遇到日期格式錯誤,但是檢查了字串後發現為'2000-01-01'並沒有問題。

同事提示我去看一下控制面板裡的 區域和語言選項 裡, 發現果然短日期分隔符為 / ,則日期解析的格式變成 2000/01/01,顯然之前的字串會出現問題.

於是查詢資料,發現有關於此問題的windows api:

int getlocaleinfo(

lcid locale,// locale identifier ,設定資訊的範圍,是系統級,還是當前使用者

lctype lctype,// type of information,設定資訊的型別

lptstr lplcdata,// address of buffer for information,設定成的值,必須用 pchar的格式傳進去

int cchdata // size of buffer

);bool setlocaleinfo(

lcid locale,// locale identifier,同上

lctype lctype,// type of information to set

lpctstr lplcdata // pointer to information to set

);兩個函式的引數很類似,其中 locale可以取兩個值:locale_system_default,表示要操作的是系統預設的設定; locale_user_default,表示要操作的是當前使用者的設定。還可以取其他值,用於具體修改某種語言區域的設定。一般取 locale_user_default。

lctype,表示要操作資訊的型別,也就是要操作的是哪一種設定。可用的值有很多:

locale_sshortdate :短日期格式

locale_slongdate :長日期格式

locale_stimeformat:時間格式

另外 locale_stime 表示時間分隔符,locale_sdate 表示日期分隔符。可以單獨使用,也可以在使用 locale_sshortdate 和 locale_stimeformat 的同時一併修改,所以不需要單獨操作。

使用getlocaleinfo或setlocaleinfo時,每次只能操作乙個型別。比如要同時設定短日期格式、長日期格式、時間格式,就必須分別用三個型別代號呼叫三次 setlocaleinfo。

在程式啟動時執行此函式:

function getdatetimeformat():string;

varbuf:pchar;

i:integer;

gprevshortdate,gprevlongdate,gprevtimeformat:string;

begin

getmem(buf,20);

i:=20; //i必須在呼叫前賦值為buf緩衝區的長度。如果設為0或負值,將取不到設定的值

getlocaleinfo(locale_user_default,locale_sshortdate,buf,i); //取當前使用者設定,短日期格式。

gprevshortdate:=string(buf);

freemem(buf);

result := gprevshortdate;

end;

程式結束時執行此函式:

procedure setdatetimeformat(aparam:string);

varp:dword;

begin

setlocaleinfo(locale_user_default,locale_sshortdate,pchar(aparam)); //設定短日期格式

sendmessagetimeout(hwnd_broadcast,wm_settingchange,0,0,smto_abortifhung,10,p);//設定完成後必須呼叫,通知其他程式格式已經更改,否則即使是程式自身也不能使用新設定的格式

end;

需要設定一全域性變數儲存啟動時獲取的日期格式.並在結束時恢復此格式.

delphi設定程式日期格式

在程式初始化時執行下面的方法 讓delphi程式不受windows日期格式的影響 procedure setsysdateformat begin 設定windows系統的短日期的格式 setlocaleinfo locale system default,lo cale sshortdate,yy...

C 中關於日期顯示格式的處理

system.datetime dt new system.datetime 取當前年月日時分秒 dt system.datetime.now 2012 11 30 9 32 31 取當前年 int 年 dt.year 2012 取當前月 int 月 dt.month 11 取當前日 int 日 d...

DELPHI7對日期格式的處理

windows系統預設的短日期格式是 yyyy m d,在delphi中進行字串互轉時,經常會因為格式問題而轉換失敗,以前都是要求施工人員或客戶手動修改系統的短日期格式為 yyyy mm dd來解決,近來無事找了一下相關資料,可以解決該問題 在應用程式開啟時,可以通過tformatsettings來...