본문 바로가기
Delphi/프로시저-함수

시스템 날짜바꾸기

by MonoSoft 2023. 7. 27.
728x90
반응형

시스템 날짜바꾸기

728x90

 

 

방법 1

시스템의 날짜를 바꾸는 방법은 아래와 같이 윈도우

API를 사용하면 간단히 바꿀수 있습니다.

 

procedure TForm1.ChgSysDateTime(ADateTime: TDateTime);

var

  sys_time: TSystemTime;

begin

  sys_time.wYear := StrToInt(FormatDateTime('yyyy', ADateTime));

  sys_time.wMonth := StrToInt(FormatDateTime('m', ADateTime));

  sys_time.wDay := StrToInt(FormatDateTime('d', ADateTime));

  sys_time.wHour := StrToInt(FormatDateTime('h', ADateTime));

  sys_time.wMinute := StrToInt(FormatDateTime('n', ADateTime));

  sys_time.wSecond := StrToInt(FormatDateTime('s', ADateTime));

 

  SetLocalTime(sys_time);

end;

 

여기서 SetLocalTime대신 SetSystemTime을 사용하면

시간이 이상하게 바뀌는것을 볼 수 있습니다.

 

SetSystemTime의 API Help를 보면

The SetSystemTime function sets the current system time and date.

The system time is expressed in Coordinated Universal Time (UTC). 라고 적혀있습니다.

 

즉, SetSystemTime 함수가 UTC를 사용한다는것입니다.

 

그래서 SetSystemTime을 사용하게되면 날짜가 이상하게 바뀌게 됩니다.

만약, SetSystemTime을 사용할려면 wHour에서 "- 9"를 해줘야합니다.

 

즉, sys_time.wHour := StrToInt(FormatDateTime('h', ADateTime)) - 9; 라고 해줘야합니다.

 

 

아래의 문장을 실행해 보면 참고가 될것 같네요.^^;

 

procedure TForm1.Button1Click(Sender: TObject);

Var

  sys_date: TSystemTime;

begin

  ShowMessage(DateTimeToStr(Now));

 

  GetLocalTime(sys_date);   

  ShowMessage(DateTimeToStr(SystemTimeToDateTime(sys_date)));

 

  GetSystemTime(sys_date);

  ShowMessage(DateTimeToStr(SystemTimeToDateTime(sys_date)));

end;

 

 

방법 2

폼(Form)에 TEdit 컨트롤과 TButton 컨트롤이 있으며,

ButtonSetDateClick 이벤트 핸들러를 통해 시스템 날짜를 변경합니다.

 

사용자가 TEdit 컨트롤에 원하는 날짜를 입력하고 버튼을 클릭하면

시스템 날짜가 해당 날짜로 변경됩니다.

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

 

type

TForm1 = class(TForm)

  EditDate: TEdit;

  ButtonSetDate: TButton;

  procedure ButtonSetDateClick(Sender: TObject);

private

  { Private declarations }

public

  { Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

procedure SetSystemDate(const NewDate: TDateTime);

var

  SysTime: TSystemTime;

begin

  DateTimeToSystemTime(NewDate, SysTime);

  SetSystemTime(SysTime);

end;

 

procedure TForm1.ButtonSetDateClick(Sender: TObject);

var

  NewDate: TDateTime;

begin

  // TEdit 컨트롤에 입력된 날짜를 TDateTime 타입으로 변환하여 시스템 날짜로 설정합니다.

  try

    NewDate := StrToDate(EditDate.Text);

    SetSystemDate(NewDate);

    ShowMessage('시스템 날짜가 변경되었습니다.');

  except

    ShowMessage('올바른 날짜 형식이 아닙니다. 날짜를 다시 입력해주세요.');

  end;

end;

 

end.

 

728x90
반응형

'Delphi > 프로시저-함수' 카테고리의 다른 글

기간사이 특정요일 개수알아내기  (0) 2023.09.11
태스크바 (taskbar) 에서 숨기기  (0) 2023.08.01
Hook(훅) SetWindowsHookEx  (0) 2023.07.07
메모(TMemo) 팁  (0) 2023.06.14
StringGrid의 Cell에 입력 값 제한  (0) 2023.06.02

댓글