본문 바로가기
VisualStudio.C++.C#/코딩팁,함수활용,단편

std::time_t tm gmtime localtime mktime asctime

by 리치굿맨 2020. 3. 29.

헤더파일 #include

std::time_t
epoch (1970년 1월 1일 0시0분0초)이후 현재까지의 초단위 경과시간.


std::tm
구조체 . 년,월,일,시,분,초 분리 처리시 용이. 

//UTC(=GMT) 
std::tm* gmtime( const std::time_t* time );



//로컬시
std::tm* localtime( const std::time_t *time );

 

 

 

 

 

코드예-1. 현재시간 받고 년월일시분초 분리.

 
 
std::time_t  로  epoch 이후의 초단위 시간을 tNow 로 받고,
tNow로부터 현재의 년,월,일,시,분,초를 각각 구하기 위하여 std::localtime(&tNow) 함수이용하여 std::tm 구조체 형식으로 변경하여 각각의 멤버변수 tm_hour, tm_min, 등을 취하고 있다.
 
1
2
3
4
5
6
7
8
9
10
11
12
    std::time_t tNow = std::time(NULL); // epoch(1970년 1월1일0시0분0초) 이후 초단위.
 
    std::cout << "sec since epoch: "    << tNow << '\n';
    std::cout << "year : "          << std::localtime(&tNow)->tm_year+1900 << '\n'// 년.tm_year 는 1900 이후 년수.
    std::cout << "month : "        << std::localtime(&tNow)->tm_mon+1     << '\n';// 월.tm_mon 은 1월=0,12월=11.
    std::cout << "day : "           << std::localtime(&tNow)->tm_mday << '\n';// 일.
    std::cout << "hour : "          << std::localtime(&tNow)->tm_hour << '\n';// 시.
    std::cout << "minute : "       << std::localtime(&tNow)->tm_min  << '\n';// 분.
    std::cout << "sec : "           << std::localtime(&tNow)->tm_sec  << '\n';// 초.
 
    std::cout << "요일 월 일 시:분:초 년 : "<< std::asctime(std::localtime(&tNow)) << '\n';
 
 
상기코드 실행결과
sec since epoch: 1456148384
year : 2016
month : 2
day : 22
hour : 22
minute : 39
sec : 44
요일 월 일 시:분:초 년 : Mon Feb 22 22:39:44 2016 

 
   

 

 

 

코드예-2. 임의 지정 "년월일시분초"를 std::tm 형식으로

 
 
1. std::tm 형 변수 tmYMDHMS 의 멤버변수에 2015년 3월 17일 13시 35분 25초를 기록하고
2. 상기 1의 변수 tmYMDHMS 를 함수 std::mktime(&tmYMDHMS);  이용하여 time_t 형 변경하고,
3. 상기2를  아스키타입으로 출력하고 있다.
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    /// 2015년 3월 17일 13시 35분 25초를 tm 형 변수에 저장하기.
 
    std::tm tmYMDHMS; 
 
    tmYMDHMS.tm_year = 2015-1900; //1900년 이후 몇년경과되었는지 기록해야함.
    tmYMDHMS.tm_mon = 3 - 1; // 1월은0,..,12월 11로 해야함.
    tmYMDHMS.tm_mday = 17; 
    tmYMDHMS.tm_hour = 13; 
    tmYMDHMS.tm_min = 35;
    tmYMDHMS.tm_sec = 25; 
 
    std::time_t theDay = std::mktime(&tmYMDHMS); // time_t 형식으로 변경. 
 
    std::cout << "요일 월 일 시:분:초 년 : " << std::asctime(std::localtime(&theDay)) << '\n';
 
 
상기코드 실행결과.
- 상기 코드에서는 요일을 지정하지 않았는데 알아서 요일을 찾아줌.
요일 월 일 시:분:초 년 : Tue Mar 17 13:35:25 2015 

   

 

 

 

코드예-3. 당일 0시 이후 현재까지의 경과시간 초단위로 받기.

 
 
당일 0시 0분0초 기준 실행시점의 경과시간을 초단위로 구하기.
1. 현재 시점의 tNow 를 std::tm 형식으로 변경하고(함수 std::localtime(&tNow) )
2. 상기1의 std::tm 형식의 멤버변수의 년월일만 신규 tm변수 tmYMDHMS 에 기록하고 시,분,초에는 0을 기록.
3. 상기2의 tmYMDHMS 를 time_t 형 변수 theDay000 으로 받고, 
4. 상기1 tNow 와 상기3 theDay000 의 초단위 차이를 함수 std::difftime(tNow, theDay000)  로 받음. 인자1-인자2의 값이 반환됨.
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    std::time_t tNow = std::time(NULL); // epoch(1970년 1월1일0시0분0초) 이후 초단위.
 
    std::tm tmYMDHMS; // 현재일자의 0시0분0초 기록할 변수.
 
    tmYMDHMS.tm_year = std::localtime(&tNow)->tm_year;
    tmYMDHMS.tm_mon = std::localtime(&tNow)->tm_mon;
    tmYMDHMS.tm_mday = std::localtime(&tNow)->tm_mday;
    tmYMDHMS.tm_hour = 0; 
    tmYMDHMS.tm_min = 0;
    tmYMDHMS.tm_sec = 0; 
 
    std::time_t theDay000 = std::mktime(&tmYMDHMS); //tmYMDHMS를 time_t 형식으로 변경. 
 
    std::cout << "오늘 0시 이후 경과 초 : " << std::difftime(tNow, theDay000) << '\n';
 
 
상기코드 실행결과. (코드 실행시점 오후 11시 9분 이었음.)
오늘 0시 이후 경과 초 : 83395  

 
   

 

 

 

코드예 4. 특정 년월일시분초 입력하면 초단위 반환 

/*
년, 월, 일, 시, 분 , 초 입력하면 초단위의 epoch (1970년1월1일0시0분0초) 이후의 경과시간 반환. 
*/
int64_t get_epoch_sec(int year, int mon, int day, int hour, int min, int sec)
{
	std::tm tm_ymdhms; 

	tm_ymdhms.tm_year = year - 1900; // 1900년 이후 몇년 경과 되었는지 기록해야함.
	tm_ymdhms.tm_mon = mon - 1; // 1월은012월은 11
	tm_ymdhms.tm_mday = day; 
	tm_ymdhms.tm_hour = hour; 
	tm_ymdhms.tm_min = min; 
	tm_ymdhms.tm_sec = sec; 

	std::time_t t_theday = std::mktime(&tm_ymdhms); // time_t 형식으로 변환. 초로 표현됨.  

	return t_theday;

}

 

 

 

연관

 

C++ std::chrono, time_point, duration, system_clock, steady_clock 고정밀 시각, 시간.

개요 고정밀 시각, 시간측정용 std::chrono 는 "C++11" 이후 도입, Visual C++ 2012 이후 도입. 용어. 시각 : time point. 시간 : time interval, 2개 시각의 간격. 특징 - 고정밀(최소 시간단위 : 나노초), 편리..

igotit.tistory.com

 

 

 

상위정리.

Visual Studio/VC++/C/C# 활용정리 -> http://igotit.tistory.com/11

 

 

Visual Studio , Visual C++ 활용 정리.

Visual Studio C++ 활용 Visual Studio Visual C++ / C# 1.설치, 설정  주제  비고.  Visual Studio 2010 설치.  Visual Studio 2013 (Community)무료 설치.  Visaul Studio 2015 (Community)무료 설치...

igotit.tistory.com

 

 

 


첫 등록 : 2016년 2월22일

최종 수정 : 2020.03.29

단축 주소 : https://igotit.tistory.com/673

 


 

 

 

 

 

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT