設定本地時間格式

2021-06-19 13:48:50 字數 2865 閱讀 7655

在delphi中,特別是在寫管理系統軟體時,經常要用到 formatdatetime 以將 tdatetime 格式的日期時間轉換成字串形式的值顯示或儲存起來,或者用 strtodatetime將字串形式的日期時間轉換成 tdatetime 然後再做其他操作。

在進行時間或日期的轉換時,會使用系統當前設定的時間日期格式。而如果時間日期格式與字串中的表示方式不相符,會使轉換過程失敗。例如當前短日期格式設定為'yyyy/mm/dd',而要轉為 '2006-10-20'這樣的字串為日期,就會報錯,說這不是乙個有效的日期。

所以在進行轉換前,要確保系統的日期時間格式與程式中使用的相符。一種方法是在安裝時由安裝程式設定,或者明確告訴使用者必須設定成要求格式。另一種就是程式在啟動時,自動設定為需要的格式,退出程式時再恢復原來的設定。

需要用到的有兩個windows api,乙個是 getlocaleinfo,乙個是 setlocaleinfo。

查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,表示要操作資訊的型別,也就是要操作的是哪一種設定。可用的值有很多,delphi的聯機幫助,或者查msdn,都有乙個大列表。但跟日期時間格式相關的一共有這幾個:

locale_sshortdate :短日期格式

locale_slongdate :長日期格式

locale_stimeformat:時間格式

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

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

還要乙個要注意的問題是,設定日期時間格式後,應該向當前系統的啟用視窗廣播傳送 wm_settingchange 訊息,否則即使修改了,程式裡還是不能用的。

以下是獲取和設定的程式片斷。

1.//獲取時間日期格式

procedure getdatetimeformat();

varbuf:pchar;

i:integer;

gprevshortdate,gprevlongdate,gprevtimeformat:string;

begin

getmem(buf,100);

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

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

gprevshortdate:=string(buf);

i:=100;

getlocaleinfo(locale_user_default,locale_slongdate,buf,i); //取長日期格式

gprevlongdate:=string(buf);

i:=100;

getlocaleinfo(locale_user_default,locale_stimeformat,buf,i); //取時間格式

gprevtimeformat:=string(buf);

freemem(buf);

end;

2.//設定時間格式

procedure setdatetimeformat();

varp:dword;

begin

setlocaleinfo(locale_user_default,locale_sshortdate,pchar('yyyy-mm-dd')); //短日期

setlocaleinfo(locale_user_default,locale_slongdate,pchar('yyyy''年''m''月 ''d''日'''));

setlocaleinfo(locale_user_default,locale_stimeformat,pchar('h:mm:ss')); //設定時間 

sendmessagetimeout(hwnd_broadcast,wm_settingchange,0,0,smto_abortifhung,10,p);

//設定完成後必須呼叫,通知其他程式格式已經更改,否則即使是程式自身也不能使用新設定的格式

end;

在程式初始化時呼叫getdatetimeformat,將取出的設定儲存起來,然後用setdatetimeformat設定需要的格式。在程式退出時再次呼叫setdatetimeformat將儲存的值寫回去。

時間格式的設定

在進行formview顯示時間資料的時候,發現格式仍然是日期和時間的完整格式,如是進行了dataformatstring 的設定.如下所示 asp boundfield headertext displaytext datafield fieldname dataformatstring items...

quartz 設定時間格式

乙個cron表示式有至少6個 也可能7個 有空格分隔的時間元素。按順序依次為 1.秒 0 59 2.分鐘 0 59 3.小時 0 23 4.天 月 0 31,但是你需要考慮你月的天數 5.月 0 11 6.天 星期 1 7 1 sun 或 sun,mon,tue,wed,thu,fri,sat 7....

設定時間格式的JSpinner

上圖 封裝成函式 public class getspinner catch parseexception e1 spinner.setmodel datemodel 對spinner的時間格式進行設定 spinner.seteditor new jspinner.dateeditor spinne...