본문 바로가기

BE/C++

[C++] 날짜를 초로 변환 (date to seconds)

 

인트로

안녕하세요. 오늘은 날짜를 초로 변환하는 방법에 대하여 포스팅하겠습니다.

C++에는 JAVA 와 달리 Calendar, SimpleDateFormat 클래스가 없기 때문에

두 날짜를 비교하기 위해서는 초(seconds)로 변환해 비교해야합니다.

 

문자열로 나타내어져 있는 시간을 파싱하여 연,월,일, 시,분,초로 나누고 시간을 초로 변환해보겠습니다. 

 

입출력 형태
입력 형태 : "2020:11:03 16:09:30" (2020년 11월 3일 16시 9분 30초")

출력형태 : 현재 날짜가 몇 초인지 출력

 

문자열 파싱 

stringstream 클래스를 통해 long long 타입에 맞는 데이터(time)만 순서대로 빼냅니다. 

데이터(time)  :  연(year) / 월(month) / 일(day) / 시(hour) / 분(minutes) / 초(second) 

 

  • 현재 년도 초로 변환 : 현재 년도 * 365 * 24 * 60 * 60
  • 현재 월을 초로 변환 : 현재 월 * 30(일) * 24(시간) * 60(분) * 60(초)
  • 현재 일을 초로 변환 : 현재 일 * 24(시간) * 60(분) * 60(초)
  • 현재 시간을 초로 변환 : 현재 시 * 60(분) * 60(초)
  • 현재 분을 초로 변환 : 현재 분 * 60(초)

년/월/일/시/분/초에 해당하는 데이터들을 모두 더해 초(seconds)로 나타냅니다. 

 

 

예제 코드 

아래는 현재 날짜 문자열을 파싱해 초로 변환한 코드입니다. 

#include <iostream>
#include <sstream>
#include <string>
#include <vector> 
using namespace std;
int main(void){
	
	vector<long long> time;
	string str = "2019:06:30 12:00:30";//연 월 일 시 분 초  
	for(int i=0;i<str.size();i++){
		if(str[i] == ':') 
		str[i] = ' ';
	}
	
	long long num  = 0;
	stringstream stream;
	stream.str(str);
	while(stream >> num){
		time.push_back(num);
	}
	
	long long second = 0;
	second  += time[0] * 365 *  24 * 60 * 60;//연 
	second += time[1] * 30 * 24 * 60 * 60;//월 
	second += time[2] * 24 * 60 * 60;//일 
	second += time[3] * 60 * 60;//시 
	second += time[4] * 60;//분 
	second += time[5];//초 
	
	cout << second << endl; 
	return 0;
}

 

*** 본 글은 stringstream 클래스를 사용하므로 아래 글을 읽고 오시면 좋습니다. *** 

 

[C++] stringstream 사용법

문자열을 나누는 stringstream C++에서 stringstream은 주어진 문자열에서 필요한 자료형에 맞는 정보를 꺼낼 때 유용하게 사용됩니다. stringstream에서 공백과 '\n'을 제외하고 문자열에서 맞는 자료형의

life-with-coding.tistory.com