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來...