LOGIN • JOININ

TIME SYSTEM

[Tutorials/[Common] 1. Object System/Tutorial_Object04_TimeAndTime]


1... Tick, Local time, System Time (UTC/GMC)

시간 시스템은 크게 TICK과 Time으로 구분합니다.


① Tick

TICK은 ms단위의 짧은 시간을 나타내는 시간으로 단일 단위로 된(Monotonic) 시간 체계입니다.
TICK은 32bit TICK, 64bit TICK으로 크기로만 정의하고 있고 CGCII에서 기본은 64bit TICK을 사용하고 있습니다.

주로 CPU의 쓰레드 혹은 실행 처리 등을 하기 위해 사용됩니다.

CGCII에서는 TICK은 'CGD:TICK'으로 제공합니다.


② Time

Time은 년월일시분초 등의여러 단위로 나태내며 일반적으로 사용하는 실제 시간을 표시하는 용도로 사용합니다. 

또 Time은 지역시(Local Time)과 표준시(System Time, UTC/GMC) 로 나뉘어 집니다.

System Time 즉 표준시는 전세계가 동일한 시간을 가지게 되며 Local은 해당 지역의 기준에 따른 시간을 말합니다.

일반적으로 시간의 저장이나 처리는 System Time을 사용하며 Local Time은 표시 용도 만으로 사용하는 경우가 많습니다.
지역시를 처리의 기준으로 하게 되면 시차가 나는 지역에서 접속한 사람이나 시스템 처리 등이 오류가 나는 경우가 많기 때문입니다.

CGCII에서는 TIME은 ‘CGD:TIME::LOCAL'과 'CGD:TIME::SYSTEM'으로 제공합니다.



2... time_point와 duration

내부적으로 시간 처리는  C++11의 표준을 사용하거나 그에 따르고 있습니다. 따라서 기본적인 개념은 C++11의 표준과 동일한 개념입니다.

'time_point'는 특정 시간을 나타내며

'duration'은 특정 시점(time_point)간의 차이를 의미합니다.


time_point.png


따라서 다음과 같은 수식이 성립될 수 있습니다.

time_duration.png


TICK과 LOCALTIME, SYSTEMTIME 모두 'duration'과 'time_point'를 가지고 있습니다.


3... Tick 사용하기
1) Tick의 duration 계산

TICK을 사용해 시간을 표현하고자 한다면 Tick 단위의 합으로 표현할 수 있습니다.

예를 들어 ‘1시간 12분 20초 100ms’는

TICK::hours(1)+TICK::minutes(12)+TICK::seconds(20)+TICK::milliseconds(100)


‘1시간 10초’는

TICK::hours(1)+TICK::seconds(20)

로 표현이 가능합니다.


2) 현재 시간 얻기

현재 시간 얻기는 간단히 now()함수로 얻을 수 있습니다.

auto tickNow = TICK::now();


만약 현재 시간에서 1분 이후의 시간을 얻으려면 다음과 같이 하면 됩니다.

auto  tickTemp = TICK::now() + TICK::minutes(1);


참 쉽죠.

이런 포맷은 기본적으로 C++11의 표준의 형태와 동일합니다.



4... Local Time과 System Time 사용하기

지역 시간은 CGD::TIME::LOCAL로 시스템 타임은 CGD::TIME::SYSTEM의 네이스페이스로 제공합니다.

또 CGD::TIME::LOCAL과 CGD::TIME::SYSTEM은 서로 자동 변환됩니다.


1) TIME의 현재 시간 얻기 및 특정 시간 저장하기

TIME의 경우도 TICK과 현재 시간을 얻는 방법 및 시간 계산 방법은 거의 동일합니다.


현재의 지역 시를 얻고 싶다면 다음과 같이 하면 될 것입니다.

auto timeNow = TIME::LOCAL::now();


시스템 타임을 얻고 싶다면 다음과 같이 하면 될것입니다.

auto timeNow = TIME::SYSTEM::now();


2) 지역 시간과 시스템 시간 상호 변환하기

변환하기 위해서는 특별한 처리는 필요 없습니다. 그냥 대입만으로 자동 변환이 됩니다. 

TIME::LOCAL::time_point  timeA	 = TIME::LOCAL::now();

TIME::SYSTEM::time_point  timeB	 = TIME::SYSTEM::now();

timeA = tempB;

timeB를 timeA에 대입하게 되면 자동적으로 시스템 시간이 지역 시간으로 변경되여 timeA로 저장됩니다.

그 반대의 경우도 자동으로 처리됩니다.