CLX C++ Libraries
Home >> date_time

Declaration

  class date_time;

Overview

C の struct tm をラップしたクラスです. boost::date_time を参考に演算子を定義しています.具体的には, 時刻 xy 秒後を計算,2つの時刻 ab の和・差を計算,2つの時刻 ab の大小関係を比較する際に, + 演算子や - 演算子,比較演算子を用いて直感的に記述することができます.

時刻 xz 時間後を計算したい場合には,対応する秒数を記述する代わりに x + clx::hours(z) と記述することができます.同様の関数として,years(),months(), days(),weeks(),hours(),minutes(),seconds() を定義しています.

尚,時刻の計算にはC 標準ライブラリの mktime() 関数を利用して計算しています.

Example

// example_date_time.cpp
#include <iostream>
#include "clx/format.h"
#include "clx/time.h"

int main(int argc, char* argv[]) {
    std::string fmt = "%a %d %b %Y %H:%M:%S JST";
    
    /*
     * 現在時刻の取得.
     * デフォルトコンストラクタは,現在時刻でdate_timeクラスを初期化する.
     */
    clx::date_time now;
    std::cout << clx::oftime(fmt, now) << std::endl;
    
    // 現在時刻から5年3ヶ月後の時刻を取得.
    clx::date_time t1 = now + clx::years(5) + clx::months(3);
    std::cout << "5 years 3 months later ... ";
    std::cout << clx::oftime(fmt, t1) << std::endl;
    
    std::cout << clx::format("%d days have passed since %d/01/01")
        % now.totaldays() % now.year() << std::endl;
    
    return 0;
}

Result
Fri 02 Nov 2007 23:08:29 JST
5 years 3 months later ... Sat 02 Feb 2013 23:08:29 JST
305 days have passed since 2007/01/01

Related Types

  typedef unsigned int value_type;
  typedef std::tm tm_type;

Constructions and Member Functions

date_time();
explicit date_time(const tm_type& t);
explicit date_time(const std::time_t& t);
explicit date_time(value_type& y, value_type& m, value_type& d,
    value_type& h, value_type& mm, value_type& s);

value_type year() const;
value_type month() const;
value_type day() const;
value_type hour() const;
value_type min() const;
value_type sec() const;
value_type totaldays() const;

date_time& now();

Operators

date_time& operator=(const date_time& t);
date_time& operator=(const tm_type& t);
date_time& operator=(const std::time_t& t);

date_time& operator+=(value_type t);
date_time& operator+=(const date_duration& t);
date_time& operator-=(value_type t);
date_time& operator-=(const date_duration& t);

double operator-(const date_time& t) const;
double operator-(const std::time_t& t) const;
double operator-(const std::tm& t) const;

friend date_time operator+(date_time x, value_type y);
friend date_time operator+(date_time x, const date_duration& y);
friend date_time operator-(date_time x, value_type y)
friend date_time operator-(date_time x, const date_duration& y);
friend date_time operator+(value_type y, date_time x);
friend date_time operator+(const date_duration& y, date_time x);
friend date_time operator-(value_type y, date_time x);
friend date_time operator-(const date_duration& y, date_time x);

friend bool operator<(const date_time& x, const date_time& y);
friend bool operator>(const date_time& x, const date_time& y);
friend bool operator<=(const date_time& x, const date_time& y);
friend bool operator>=(const date_time& x, const date_time& y);
friend bool operator==(const date_time& x, const date_time& y);
friend bool operator!=(const date_time& x, const date_time& y);

Related Pages

  1. CLX C++ Libraries - ioftime

References

  1. Manpage of CTIME
  2. Boost C++ Libraries - Boost Date_Time