Delphi 획득 및 시스템 시간 형식 설정

3562 단어 Delphi
Delphi 획득 및 시스템 시간 형식 설정
Delphi에서 특히 관리 시스템 소프트웨어를 쓸 때FormatDateTime을 사용하여 TDateTime 형식의 날짜와 시간을 문자열 형식의 값으로 표시하거나 저장하거나StrToDateTime으로 문자열 형식의 날짜와 시간을 TDateTime로 변환한 다음에 다른 조작을 해야 한다.시간 또는 날짜를 변환할 때 시스템이 현재 설정한 시간 날짜 형식이 사용됩니다.시간 날짜 형식이 문자열의 표현 방식과 일치하지 않으면 변환 과정이 실패할 수 있습니다.예를 들어 현재 짧은 날짜 형식을 'yyyy/MM/dd' 로 설정하고 '2006-10-20' 이라는 문자열을 날짜로 바꾸면 유효한 날짜가 아니라고 잘못 보고할 수 있습니다.따라서 변환을 진행하기 전에 시스템의 날짜와 시간 형식이 프로그램에서 사용한 것과 일치하는지 확인해야 한다.한 가지 방법은 설치할 때 설치 프로그램이 설정하거나 사용자에게 요구 형식으로 설정해야 한다고 명확하게 알려주는 것이다.다른 하나는 프로그램을 시작할 때 자동으로 필요한 형식으로 설정하고 프로그램을 종료할 때 원래의 설정을 복원하는 것이다.필요한 것은 두 개의 Windows API가 있는데, 하나는 GetLocaleInfo이고, 하나는 SetLocaleInfo이다.API 설명: int GetLocale Info(LCID Locale,//locale identifier, 정보의 범위를 설정합니다. 시스템 레벨인지 현재 사용자인지, LCTYPE LCType,//type of information, 정보의 유형을 설정하는 LPTSTR lpLCData,//address of buffer for infor information인지, 설정된 값은 pchar 형식으로 int cchData//size of buffer)를 전송해야 합니다.
BOOL SetLocale Info(LCID Locale,//locale identifier, LCTYPE LCType,//type of information to set LPCTR lpLCData//pointer to information to set);
두 함수의 매개 변수는 매우 유사한데, 그 중에서 Locale는 두 개의 값을 얻을 수 있다: LOCALESYSTEM_DEFAULT는 시스템의 기본 설정을 조작한다는 것을 나타낸다.LOCALE_USER_DEFAULT - 현재 사용자의 설정을 조작하는 것을 나타냅니다.특정 언어 영역의 설정을 구체적으로 수정하는 데 사용할 다른 값도 얻을 수 있다.보통 LOCALEUSER_DEFAULT.LCType 은 작업할 정보의 유형을 나타냅니다. 즉, 작업할 설정의 종류입니다.사용 가능한 값은 매우 많습니다. 델피의 온라인 도움말이나 MSDN을 찾아보면 큰 목록이 있습니다.그러나 날짜와 시간 형식과 관련된 것은 모두 다음과 같다. LOCALESSHORTDATE: 짧은 날짜 형식 LOCALESLONGDATE: 긴 날짜 형식 LOCALESTIMEFORMAT: 별도의 시간 형식 LOCALESTIME 는 시간 구분자, LOCALE 를 나타냅니다.SDATE는 날짜 구분자를 나타냅니다.별도 또는 LOCALE 사용 가능SSHORTDATE 및 LOCALESTIMEFORMAT과 함께 수정되므로 별도의 작업이 필요하지 않습니다.GetLocaleInfo 또는 SetLocaleInfo를 사용할 때는 한 번에 하나의 유형만 사용할 수 있습니다.예를 들어 짧은 날짜 형식, 긴 날짜 형식, 시간 형식을 동시에 설정하려면 각각 세 가지 유형의 대명사로 세 번의SetLocaleInfo를 호출해야 한다.또 하나 주의해야 할 문제는 날짜와 시간 형식을 설정한 후 현재 시스템의 활성화 창에 WM 을 보내야 한다는 것이다SETTINGCHANGE 메시지입니다. 그렇지 않으면 수정되었더라도 프로그램에서 사용할 수 없습니다.다음은 가져오고 설정한 프로그램 단편입니다.
1.//가져오기 시간 날짜 형식
procedure GetDateTimeFormat();
var
  buf: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();var  p:DWORD;begin  SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SSHORTDATE,pchar('yyyy-MM-dd'));//짧은 날짜 형식 SetLocaleInfo(LOCALE USER DEFAULT, LOCALE SLONGDATE, pchar('yyy'년'M'월'd'일') 설정//긴 날짜 형식을 yyy'년'M'월'd'일로 설정하고'년 월 일'문자는 반드시 작은 따옴표로 묶어야 한다.Delphi 문자열에는 두 개의 작은 따옴표가 있어야 합니다.  SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_STIMEFORMAT,pchar('H:mm:ss'));//시간 형식을 설정하고 24시간제 SendMessage Time Out(HWND BROADCAST, WM SETTINGCHANGE, 0,0, SMTO ABORTIFHUNG, 10,p);설정이 완료되면 다른 프로그램의 형식이 변경되었음을 알리고, 그렇지 않으면 프로그램 자체도 새로 설정한 형식end를 사용할 수 없습니다.
프로그램이 초기화될 때 GetDateTimeFormat를 호출하여 꺼낸 설정을 저장한 다음 SetDateTimeFormat로 필요한 형식을 설정합니다.프로그램을 종료할 때 SetDateTimeFormat를 다시 호출하여 저장된 값을 다시 씁니다.물론 프로그램이 이미 실행 중이라면 다른 프로그램도 우리처럼 격식을 필요로 하는 격식으로 바꾸면 어쩔 수 없다. 동시에 하나만 실행할 수 있다. 그렇지 않으면 서로 방해가 될 것이다.방법을 생각해야 한다면 WM을 처리할 수 있을지도 몰라SETTINGCHANGE 소식, 고친 거 다시 고쳐볼까?강도가 좀 있어.

좋은 웹페이지 즐겨찾기