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 を参考に演算子を定義しています.具体的には, 時刻 x の y 秒後を計算,2つの時刻 a,b の和・差を計算,2つの時刻 a,b の大小関係を比較する際に, + 演算子や - 演算子,比較演算子を用いて直感的に記述することができます.
時刻 x の z 時間後を計算したい場合には,対応する秒数を記述する代わりに x + clx::hours(z) と記述することができます.同様のクラス/関数として,years(),months(), days(),weeks(),hours(),minutes() を定義しています.詳細は, time_duration を参照して下さい.
尚,時刻の計算にはC 標準ライブラリの mktime() 関数を利用して計算しています.
Example
#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() の補助クラス/関数群を併用して下さい.