CLX C++ Libraries
Home >> date_time

Declaration

template <class TimeZone>
class basic_date_time;

typedef basic_date_time<CLX_TZ_LOCAL> date_time;
typedef basic_date_time<CLX_TZ_UTC> date_time_utc;

Overview

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

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

尚,時刻の計算には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 << now.to_string<char>(fmt) << std::endl;
    
    // 現在時刻から5年3ヶ月後の時刻を取得.
    clx::date_time t1 = now + clx::years(5) + clx::months(3);
    std::cout << "5 years 3 months later ... ";
    std::cout << t1.to_string<char>(fmt) << 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

Template Parameters

TimeZone
どのタイムゾーンで日付・時刻を計算するのかを指定します.現在, CLX_TZ_LOCAL (実行するコンピュータのローカルタイムゾーン),CLX_TZ_UTC (UTC タイムゾーン)の 2 種類が定義されています.

Related Types

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

Constructions and Member Functions

date_time();
explicit basic_date_time(const tm_type& t);
explicit basic_date_time(const std::time_t& t);
explicit basic_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 minute() const;
value_type second() const;
value_type totaldays() const;

コンストラクタには,std::time,および struct tm 構造体を指定することもできます. デフォルトコンストラクタを呼び出した場合,現在時刻を基にして date_time クラスを初期化します.

template <class CharT>
basic_date_time& from_string(const CharT* s, const CharT* fmt);

template <class CharT>
basic_date_time& from_string(const std::basic_string<CharT>& s,
    const std::basic_string<CharT>& fmt = "%Y-%m-%dT%H:%M:%S");

template <class CharT>
std::basic_string<CharT> to_string(const CharT* fmt);

template <class CharT>
std::basic_string<CharT> to_string(
    const std::basic_string<CharT> fmt = "%Y-%m-%dT%H:%M:%S");

date_time <-> 文字列の相互変換を行うためのメソッド群です.どちらも fmt にしたがって文字列を解析/出力します.fmt を省略した場合,"yyyy-mm-ddTHH:MM:SS" と言う書式で文字列を解析/出力します.詳細については, date_time - string conversion を参照して下さい.

Operators

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

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

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

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

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

value_type は"秒"を表します."年" や "時間" などの加減演算を行いたい場合は,clx::years(),clx::months(),clx::days(), clx::hours(),clx::minutes() の補助クラス/関数群を併用して下さい.

Related Page

  1. CLX C++ Libraries - date_time - string conversion
  2. CLX C++ Libraries - time_duration

References

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