본문 바로가기

진리는어디에/C++

[boost] posix_time::ptime을 이용한 DateTime 클래스

소스 코드

DateTime 객체 생성

DateTime 클래스 생성자 목록
   
DateTime();
DateTime(time_t unixTimestamp);
DateTime(int year, int month, int day, int hour, int minute, int second);
DateTime(const std::string& fmt);

DateTime()

Gamnet::Time::DateTime date_time;
std::cout << "Default:" << date_time.ToString() << std::endl;

// OUTPUT :
// default date time:1400-01-01 00:00:00

기본 DateTime 클래스는 boost::posix_time::ptime의 기본값인 '1400-01-01 00:00:00'으로 설정 된다.

DateTime(time_t unixTimestamp)

Gamnet::Time::DateTime date_time_1(time(nullptr));
std::cout << "Current UTC DateTime from time() : " << date_time_1.ToString() << std::endl;
    
Gamnet::Time::DateTime date_time_2 = Gamnet::Time::UTC::Now();
std::cout << "Current UTC DateTime from Now() : " << date_time_2.ToString() << std::endl;
    
Gamnet::Time::DateTime date_time_3 = Gamnet::Time::Local::Now();
std::cout << "Current Local DateTime from Now() : " << date_time_3.ToString() << std::endl;

// OUTPUT :
// Current UTC DateTime from time() : 2022-05-29 14:22:13
// Current UTC DateTime from Now() : 2022-05-29 14:22:13
// Current Local DateTime from Now() : 2022-05-29 23:22:13

생성자의 인자로 타임스템프를 넘겨주어 초기화가 가능하다.

  • Gamnet::Time::UTC::Now() : UTC 기준 현재 시각을 DateTime 클래스 인턴스로 리턴한다.
  • Gamnet::Time::Local::Now() : 로컬 기준 현재 시각을 DateTime 클래스 인스턴스로 리턴한다.

DateTime(int year, int month, int day, int hour, int minute, int second)

Gamnet::Time::DateTime date_time(2019, 10, 8, 23, 4, 17);
std::cout << "DateTime from argument:" << date_time.ToString() << std::endl;

// OUTPUT :
// DateTime from argument:2019-10-08 23:04:17

DateTime(const std::string& fmt)

Gamnet::Time::DateTime date_time("2022-01-01 00:00:01");
std::cout << "DateTime from string:" << date_time.ToString() << std::endl;

// OUTPUT :
// DateTime from string:2022-01-01 00:00:01

아래 포멧의 문자열 날짜를 인자로 입력 받아 DateTime 객체를 초기화 한다.

  • 4자리 연도
  • 2자리 숫자 월
  • 2자리 숫자 일
  • 24시간 숫자 시간
  • 00 ~ 59 분
  • 00 ~ 59 초

DateTime 연산

날짜, 시간 증가/감소

Gamnet::Time::DateTime now("2022-01-01 00:00:00");
std::cout << "now : " << now.ToString() << std::endl;
// OUTPUT -> now : 2022-01-01 00:00:00

// 년
now += Gamnet::Time::DateTime::Years(1);
std::cout << now.ToString() << std::endl;
// OUTPUT -> after add 1 Year : 2023-01-01 00:00:00

now -= Gamnet::Time::DateTime::Years(2);
std::cout << "after subtract 2 Year : " << now.ToString() << std::endl;
// OUTPUT -> after subtract 2 Year : 2021-01-01 00:00:00

// 월
now += Gamnet::Time::DateTime::Months(1);
std::cout << "after add 1 Month : " << now.ToString() << std::endl;
// OUTPUT -> after add 1 Month : 2021-02-01 00:00:00

now -= Gamnet::Time::DateTime::Months(4);
std::cout << "after subtract 4 Month : " << now.ToString() << std::endl;
// OUTPUT -> after subtract 4 Month : 2020-10-01 00:00:00

// 일
now += Gamnet::Time::DateTime::Days(30);
std::cout << "after add 30 Days : " << now.ToString() << std::endl;
// OUTPUT -> after add 30 Days : 2020-10-31 00:00:00

now -= Gamnet::Time::DateTime::Days(15);
std::cout << "after subtract 15 Days : " << now.ToString() << std::endl;
// OUTPUT -> after subtract 15 Days : 2020-10-16 00:00:00
        
// 시
now += Gamnet::Time::DateTime::Hours(23);
std::cout << "after add 23 Hours : " << now.ToString() << std::endl;
// OUTPUT -> after add 23 Hours : 2020-10-16 23:00:00

now -= Gamnet::Time::DateTime::Hours(48);
std::cout << "after subtract 48 Hours : " << now.ToString() << std::endl;
// OUTPUT -> after subtract 48 Hours : 2020-10-14 23:00:00

// 분
now += Gamnet::Time::DateTime::Minutes(59);
std::cout << "after add 59 Minutes : " << now.ToString() << std::endl;
// OUTPUT -> after add 59 Minutes : 2020-10-14 23:59:00

now -= Gamnet::Time::DateTime::Minutes(10);
std::cout << "after subtract 10 Minutes : " << now.ToString() << std::endl;
// OUTPUT -> after subtract 10 Minutes : 2020-10-14 23:49:00

// 초
now += Gamnet::Time::DateTime::Seconds(61);
std::cout << "after add 61 Seconds : " << now.ToString() << std::endl;
// OUTPUT -> after add 61 Seconds : 2020-10-14 23:50:01

now -= Gamnet::Time::DateTime::Seconds(5);
std::cout << "after subtract 5 Seconds : " << now.ToString() << std::endl;
// OUTPUT -> after subtract 5 Seconds : 2020-10-14 23:49:56

날짜 비교('==', '!=', '>', '<', '>=', '<=')

Gamnet::Time::DateTime date1("2021-01-01 00:00:00");
Gamnet::Time::DateTime date2("2022-01-01 00:00:00");

std::cout << std::boolalpha << (date1 > date2) << std::endl;

DateTime 함수

  • time_t UnixTimestamp(const DateTime& datetime)
    DateTime을 유닉스 타임스템프 형식으로 변경
  • DateTime FromUnixtime(time_t timestamp)
    유닉스 타임스템프를 DateTime 형식으로 변경
  • int DateDiff(const DateTime& lhs, const DateTime& rhs)
    두 DateTime 간 일 단위 차이를 리턴한다.
  • int TimestampDiff(const DateTime& lhs, const DateTime& rhs)
    두 DateTime 간 초 단위 차이를 리턴한다.

 

유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!