[C++ 언어-기초실습-1] 시간 구하기

in #kr-dev6 years ago (edited)

[C++ 언어-기초실습-1] 시간 구하기



오늘은 이론 공부가 아닌 간단한 실습을 하는 차원으로 시간을 구하는 방법을 알아보도록 하겠습니다.

1. 시간


#include <time.h>

위 헤더팡리에서 시간 관련 함수들을 제공 합니다. 오늘 실습의 내용은 현재 시간을 구하는 코딩입니다.

  time_t m_t;
  struct tm *m_tm;

두가지 형태로 시간 객체, 시간 구조체 변수를 만들어 접근이 이루어 집니다.

시간을 우리가 이해하기 쉬운 형태로 변환하는 형태가 tm 구조체 입니다.
tm 구조체를 열어보시면 아래와 같은 형태로 되어 있는 것을 보실 수 있을 거에요.

struct tm {
   int tm_sec;   // seconds of minutes from 0 to 61
   int tm_min;   // minutes of hour from 0 to 59
   int tm_hour;  // hours of day from 0 to 24
   int tm_mday;  // day of month from 1 to 31
   int tm_mon;   // month of year from 0 to 11
   int tm_year;  // year since 1900
   int tm_wday;  // days since sunday
   int tm_yday;  // days since January 1st
   int tm_isdst; // hours of daylight savings time
}

현재 시간을 구하기 때문에 몇시 몇분이니깐 tm_hour, tm_min을 사용하게 됩니다. 그럼 이 구조첵 변수로 바로 불러오면 읽을 수 있는 것이 아닙니다.

 m_tm = gmtime(&m_t);

이렇게 시간 값을 m_t를 던져 줘서 세팅을 해야 합니다. 그 값을 기준으로 구조체 안에 각 시간변수의 값들을 읽을 수 있게 되는 것이죠.

참고로,

time_t m_t;

이 time_t는 UTC 1970-1-1 0:00:00 이후 경과한 초를 담고 있습니다. 그리고 현재의 시간을 구하기 위해서는 다음과 같이 세팅을 해야 합니다.

  time(&m_t); 
  //m_t =time(0);  

이렇게 시간 함수에 값을 m_t로 하거나 time(0)으로 한 뒤 그 time(0)의 반환 값을 m_t로 해서 gmtime(&m_t)함수로 해서 시간을 세팅하셔도 되고 아예 time(&m_t)함수로 하고 처음 변수 선언 했던 값으로 세팅하면 m_t값은 time(0)의 반환 값이 되고 그 값을 gmtime(&m_t)함수에 인자 값으로 넣으면 현재의 시간을 구할 수 있게 됩니다. 두가지 형태가 있는데 자신이 이해하기 쉬운 형태로 코딩하면 됩니다.

이렇게 시간값들이 세팅이 완료 되면은 구조체 tm의 각 변수들을 불러오기만 하면 해당 시간 값을 얻을 수 있게 됩니다.

m_tm->tm_hour
m_tm->tm_min

이렇게 말이죠. 참고로 tm_hour는 표준 시간값인데 한국시간과는 9시간의 차이가 발생합니다. 그래서 +9을 한 뒤에 하루 시간은 24시간이니깐 다시 24로 나누어 주면 현재 한국 시간을 정확히 알아 낼 수 있게 됩니다.

2. 코딩


그렇다면 위에서 설명한 것처럼 한국시간을 구할 수 있는지 실제로 코딩을 해봐야 겠죠.

[전체소소]

#include <iostream>
#include <time.h>
using namespace std;

int main(int argc, char** argv) {

  time_t m_t;
  struct tm *m_tm;
  
  time(&m_t); 
  //m_t =time(0);  
  
  m_tm = gmtime(&m_t);

  cout<<"[한국시간] "<<(m_tm->tm_hour + 9) % 24<<" : "<<m_tm->tm_min<<endl; 
  
  return 0;
}

[결과]

a1.jpg

마무리


한국시간을 구하는 방법을 실습해 보았습니다. 현재 표준 시간과 같이 나타내고 싶다면 현재 표준 시간은 +9을 안한 시간값을 출력 하면 됩니다. 다른 외국 시간을 구하고 싶다면 해당 외국 시간이 표준 시간과의 시간차만 알고 있다면 쉽게 각국의 시간을 계산을 할 수 있습니다.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 700K SP virus707 account.

얘들 이 time 있잖아요. 이거는 시간을 어디서 받아와요? PC에서 clock 기준으로 정확하게 잰 시간인가요? 아니면 웹표준에서 받아오나요? 갑자기 궁금해지네요. ㅎㅎㅎ

1970년 01월 01일 0시부터 함수를 호출할 때 까지의 초 카운트한 값인데요. 시스템 내부 운영체제나 아니면 하드웨어쪽에서 누적 된 값 클럭 값을 읽어 오는 것이 아닐까요. 우선 읽어 올 경로를 찾을려면 time.h에서 부터 거슬러 올라가봐야 알 수 있지 않을까요. 시스템 어디에서 클럭 값을 읽어오는지 말이죠.

아두이노 때를 보더라도 아두이노에 전원이 들어오면 타이머가 돌잖아요. 이때 시간값이 특정 변수에 누적되고요. 시간을 구하기 위해서 그 변수를 불어와서 읽거나 수정이 가능했었잖아요.
이처럼 C언어에서도 클럭값에 해당 되는 시스템을 접근 할 수 있는 읽을 수 있는 전역 변수가 어디 있겠죠. 그걸 읽어오지 않았을까요.

c언어 자체가 시스템까지 건들 수 있는 언어니깐 아마도 시스템쪽의 해당 변수의 값을 전역변수로 해서 읽어 왔을 것 같아 보이네요.

Time.h 해석한걸 검색해서 읽어보니깐 GMC 표준시간으로 바꾸는 함수가 있네요. 어디 서버로 가는 모양? 로컬인가?

그건 표준시간으로 바꾸는 거고요. 그 전단계로 계속 추적해야 알 수 있을 거에요.

Coin Marketplace

STEEM 0.13
TRX 0.33
JST 0.034
BTC 110018.34
ETH 4281.60
USDT 1.00
SBD 0.83