본문 바로가기

진리는어디에/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 간 초 단위 차이를 리턴한다.

 

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