인트로
안녕하세요. 오늘은 날짜를 초로 변환하는 방법에 대하여 포스팅하겠습니다.
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 클래스를 사용하므로 아래 글을 읽고 오시면 좋습니다. ***
'BE > C++' 카테고리의 다른 글
[C++][STL] Queue 기본 사용법 및 예제 (2) | 2020.11.04 |
---|---|
[C++][STL] Vector 기본 사용법 및 예제 활용 (1) | 2020.11.03 |
[C++][STL] Stack 기본 사용법 및 예제 (3) | 2020.11.03 |
[C++] 이차원 배열 동적할당하기 (0) | 2020.11.02 |
[C++] stringstream 사용법 (0) | 2020.10.30 |