天天看點

動态設定系統日期格式

 動态設定系統日期格式

1 問題提出

     在操作資料庫表的時候,通常需要對表中的日期類型的資料做處理,對于系統來說存在多種

日期格式,資料庫的日期字段也存在多種格式,當往資料庫表中插入日期字段的時候必須兩者的日期

格式比對才能插入資料,在這種情況下,一般需要更改系統的日期格式,改成與資料庫表中的日期字段

一緻的格式(因為表的設計已經定好,對于日期的格式也已經唯一确定,是以一般情況下都是更改系統

的日期格式),那麼就必須能夠在程式中自動改變系統的日期格式,使其和表的日期格式比對!

2 程式中修改日期格式的系統API的說明

  主要需要使用下面的windows API

BOOL SetLocaleInfo(

    LCID Locale, // locale identifier

    LCTYPE LCType, // type of information to set

    LPCTSTR lpLCData  // pointer to information to set

   ); 

 本函數主要用于windows系統中設定系統的區域選項,主要包括時間,語言等選項的設定。

LCID:locale identifier (區域标志)

   在系統中有兩個預設值:

            LOCALE_SYSTEM_DEFAULT:系統預設的區域選項;

            LOCALE_USER_DEFAULT:目前使用者的區域選項;

   同時使用者也可以通過 MAKELCID宏動态建立LCID;

LCType:需要設定的系統資訊類型;

   主要包括下面的值:

    LOCALE_ICALENDARTYPE LOCALE_SDATE

    LOCALE_ICURRDIGITS         LOCALE_SDECIMAL

    LOCALE_ICURRENCY         LOCALE_SGROUPING

    LOCALE_IDIGITS         LOCALE_SLIST

    LOCALE_IFIRSTDAYOFWEEK LOCALE_SLONGDATE

    LOCALE_IFIRSTWEEKOFYEAR LOCALE_SMONDECIMALSEP

    LOCALE_ILZERO         LOCALE_SMONGROUPING

    LOCALE_IMEASURE         LOCALE_SMONTHOUSANDSEP

    LOCALE_INEGCURR         LOCALE_SNEGATIVESIGN

    LOCALE_INEGNUMBER         LOCALE_SPOSITIVESIGN

    LOCALE_ITIME         LOCALE_SSHORTDATE

    LOCALE_S1159         LOCALE_STHOUSAND

    LOCALE_S2359         LOCALE_STIME

    LOCALE_SCURRENCY         LOCALE_STIMEFORMAT

 lpLCData:需要設定的資訊的存放位址;

與起對應的函數為

int GetLocaleInfo(

    LCID Locale, // locale identifier

    LCTYPE LCType, // type of information

    LPTSTR lpLCData, // address of buffer for information

    int cchData  // size of buffer

   ); 

 主要用于取得目前系統的區域設定,各個參數和使用過程不再一一說明。

3 使用舉例

//取得目前系統的短日期格式;

function Tfrmmain.GetsysDateFormat: string;

var

   sgs:string;

begin

   setlength(sgs,12);

   GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SSHORTDATE ,PChar(sgs),12);

   result:=string(pchar(sgs));

end;

//設定系日期格式;

procedure Tfrmmain.SetSysDateFormat(s: string);

begin

   SetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SSHORTDATE,PChar(s));

end;