시스템 날짜바꾸기
방법 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.
'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 |
댓글