datetime.hpp

datetime.hpp #

TOMLのdatetimeで使用される、日時情報を保存するクラスを定義します。

enum class month_t #

月を指定するenum classです。

std::tmとの関係で、local_dateは1月を0としています。 混乱を避けるため、月の名前で指定できるようmonth_tが用意されています。

namespace toml
{
enum class month_t : std::uint8_t
{
    Jan =  0,
    Feb =  1,
    Mar =  2,
    Apr =  3,
    May =  4,
    Jun =  5,
    Jul =  6,
    Aug =  7,
    Sep =  8,
    Oct =  9,
    Nov = 10,
    Dec = 11
};
}

local_date #

日付を保持する構造体です。

yearは西暦を、monthstd::tmとの対応のため1月を0として、dayは日付を保持します。

namespace toml
{
struct local_date
{
    std::int16_t year;
    std::uint8_t month;
    std::uint8_t day;

    local_date() = default;
    ~local_date() = default;
    local_date(local_date const&) = default;
    local_date(local_date&&)      = default;
    local_date& operator=(local_date const&) = default;
    local_date& operator=(local_date&&)      = default;

    local_date(int y, month_t m, int d);
    explicit local_date(const std::tm& t);
    explicit local_date(const std::chrono::system_clock::time_point& tp);
    explicit local_date(const std::time_t t);

    operator std::chrono::system_clock::time_point() const;
    operator std::time_t() const;
};

bool operator==(const local_date&, const local_date&);
bool operator!=(const local_date&, const local_date&);
bool operator< (const local_date&, const local_date&);
bool operator<=(const local_date&, const local_date&);
bool operator> (const local_date&, const local_date&);
bool operator>=(const local_date&, const local_date&);

std::ostream& operator<<(std::ostream& os, const local_date& date);
std::string to_string(const local_date& date);
}

メンバ変数 #

year #

std::int16_t year;

西暦です。オフセットはありません。2024年は2024です。

month #

std::uint8_t month;

月を表します。std::tmとの対応のため、1月は0, 2月は1と続きます。

混乱を避けるため、構築の際はmonth_tを使用します。

day #

std::uint8_t day;

日付を表します。1日は1です。

メンバ関数 #

コンストラクタ #

local_date() = default;

デフォルト実装を使用します。

デストラクタ #

~local_date() = default;

デフォルト実装を使用します。

コピー・ムーブコンストラクタ #

local_date(local_date const&) = default;
local_date(local_date&&)      = default;

デフォルト実装を使用します。

コピー・ムーブ代入演算子 #

local_date& operator=(local_date const&) = default;
local_date& operator=(local_date&&)      = default;

デフォルト実装を使用します。

コンストラクタ(int year, month_t month, int day) #

local_date(int y, month_t m, int d);

指定した値からlocal_dateを構築します。

境界チェックなどは行いません。

コンストラクタ(std::tm) #

local_date(const std::tm&);

指定した値からlocal_dateを構築します。

コンストラクタ(std::chrono::system_clock::time_point) #

local_date(const std::chrono::system_clock::time_point&);

指定した値からlocal_dateを構築します。

タイムゾーンは実行環境でのものが選択されます。

コンストラクタ(std::time_t) #

local_date(const std::time_t);

指定した値からlocal_dateを構築します。

タイムゾーンは実行環境でのものが選択されます。

operator std::chrono::system_clock::time_point #

operator std::chrono::system_clock::time_point() const;

std::chrono::system_clock::time_pointに変換します。

タイムゾーンは実行環境でのものが選択されます。

時刻は0時00分とします。

operator std::time_t #

operator std::time_t() const;

std::time_tに変換します。

タイムゾーンは実行環境でのものが選択されます。

時刻は0時00分とします。

非メンバ関数 #

比較演算子 #

bool operator==(const local_date&, const local_date&);
bool operator!=(const local_date&, const local_date&);
bool operator< (const local_date&, const local_date&);
bool operator<=(const local_date&, const local_date&);
bool operator> (const local_date&, const local_date&);
bool operator>=(const local_date&, const local_date&);

日付の順序によって比較します。

ストリーム出力演算子 #

std::ostream& operator<<(std::ostream& os, const local_date& date);

TOMLのデフォルトのフォーマットで出力を行います。

to_string #

std::string to_string(const local_date& date);

TOMLのデフォルトのフォーマットで文字列化します。

local_time #

namespace toml
{
struct local_time
{
    std::uint8_t  hour;        // [0, 23]
    std::uint8_t  minute;      // [0, 59]
    std::uint8_t  second;      // [0, 60]
    std::uint16_t millisecond; // [0, 999]
    std::uint16_t microsecond; // [0, 999]
    std::uint16_t nanosecond;  // [0, 999]

    local_time(int h, int m, int s, int ms = 0, int us = 0, int ns = 0);

    explicit local_time(const std::tm& t);

    template<typename Rep, typename Period>
    explicit local_time(const std::chrono::duration<Rep, Period>& t);

    operator std::chrono::nanoseconds() const;

    local_time() = default;
    ~local_time() = default;
    local_time(local_time const&) = default;
    local_time(local_time&&)      = default;
    local_time& operator=(local_time const&) = default;
    local_time& operator=(local_time&&)      = default;
};

bool operator==(const local_time& lhs, const local_time& rhs);
bool operator!=(const local_time& lhs, const local_time& rhs);
bool operator< (const local_time& lhs, const local_time& rhs);
bool operator<=(const local_time& lhs, const local_time& rhs);
bool operator> (const local_time& lhs, const local_time& rhs);
bool operator>=(const local_time& lhs, const local_time& rhs);

std::ostream& operator<<(std::ostream& os, const local_time& time);
std::string to_string(const local_time& time);
}

メンバ変数 #

hour #

std::uint8_t  hour;

時間を表します。0から23の値を取ります。

minute #

std::uint8_t  minute;      // [0, 59]

分を表します。0から59の値を取ります。

second #

std::uint8_t  second;      // [0, 60]

秒を表します。0から60の値を取ります。

millisecond #

std::uint16_t millisecond; // [0, 999]

ミリ秒を表します。0から999の値を取ります。

microsecond #

std::uint16_t microsecond; // [0, 999]

マイクロ秒を表します。0から999の値を取ります。

nanosecond #

std::uint16_t nanosecond;  // [0, 999]

ナノ秒を表します。0から999の値を取ります。

メンバ関数 #

デフォルトコンストラクタ #

local_time() = default;

全ての値を0で初期化します。

コンストラクタ(h, m, s, ms = 0, us = 0, ns = 0) #

local_time(int h, int m, int s, int ms = 0, int us = 0, int ns = 0);

指定された時刻を使って構築します。

境界チェックは行われません。

コンストラクタ(std::tm) #

explicit local_time(const std::tm& t);

std::tmtm_hour, tm_min, tm_secを使って構築します。

サブセコンドは全て0で初期化されます。

コンストラクタ(std::chrono::duration) #

template<typename Rep, typename Period>
explicit local_time(const std::chrono::duration<Rep, Period>& t);

durationをその日の0時からの時間として構築します。

operator std::chrono::nanoseconds #

operator std::chrono::nanoseconds() const;

std::chrono::nanosecondsへ変換します。

非メンバ関数 #

比較演算子 #

bool operator==(const local_time& lhs, const local_time& rhs);
bool operator!=(const local_time& lhs, const local_time& rhs);
bool operator< (const local_time& lhs, const local_time& rhs);
bool operator<=(const local_time& lhs, const local_time& rhs);
bool operator> (const local_time& lhs, const local_time& rhs);
bool operator>=(const local_time& lhs, const local_time& rhs);

時刻の値によって比較を行います。

ストリーム演算子 #

std::ostream& operator<<(std::ostream& os, const local_time& time);

TOMLのデフォルトのフォーマットで出力を行います。

to_string #

std::string to_string(const local_time& time);

TOMLのデフォルトのフォーマットで文字列化します。

time_offset #

namespace toml
{
struct time_offset
{
    std::int8_t hour{0};   // [-12, 12]
    std::int8_t minute{0}; // [-59, 59]

    time_offset(int h, int m);

    operator std::chrono::minutes() const;

    time_offset() = default;
    ~time_offset() = default;
    time_offset(time_offset const&) = default;
    time_offset(time_offset&&)      = default;
    time_offset& operator=(time_offset const&) = default;
    time_offset& operator=(time_offset&&)      = default;
};

bool operator==(const time_offset&, const time_offset&);
bool operator!=(const time_offset&, const time_offset&);
bool operator< (const time_offset&, const time_offset&);
bool operator<=(const time_offset&, const time_offset&);
bool operator> (const time_offset&, const time_offset&);
bool operator>=(const time_offset&, const time_offset&);

std::ostream& operator<<(std::ostream& os, const time_offset& offset);
std::string to_string(const time_offset& offset);
}

メンバ変数 #

hour #

std::int8_t hour{0};   // [-12, 12]

時間のオフセットです。-12から+12の範囲の値を取ります。

minute #

std::int8_t minute{0}; // [-59, 59]

分のオフセットです。-59から+59の範囲の値を取ります。

メンバ関数 #

コンストラクタ #

time_offset(int h, int m);

時間と分を取って構築します。

境界チェックは行いません。

operator std::chrono::minutes #

operator std::chrono::minutes() const;

std::chrono::minutesへの変換を行います。

非メンバ関数 #

比較演算子 #

bool operator==(const time_offset&, const time_offset&);
bool operator!=(const time_offset&, const time_offset&);
bool operator< (const time_offset&, const time_offset&);
bool operator<=(const time_offset&, const time_offset&);
bool operator> (const time_offset&, const time_offset&);
bool operator>=(const time_offset&, const time_offset&);

時刻の長さで比較します。

ストリーム出力演算子 #

std::ostream& operator<<(std::ostream& os, const time_offset&);

TOMLのデフォルトのフォーマットで出力を行います。

to_string #

std::string to_string(const time_offset&);

TOMLのデフォルトのフォーマットで文字列化します。

local_datetime #

namespace toml
{
struct local_datetime
{
    local_date date;
    local_time time;

    local_datetime(local_date d, local_time t);

    explicit local_datetime(const std::tm& t);
    explicit local_datetime(const std::chrono::system_clock::time_point& tp);
    explicit local_datetime(const std::time_t t);

    operator std::chrono::system_clock::time_point() const;
    operator std::time_t() const;

    local_datetime() = default;
    ~local_datetime() = default;
    local_datetime(local_datetime const&) = default;
    local_datetime(local_datetime&&)      = default;
    local_datetime& operator=(local_datetime const&) = default;
    local_datetime& operator=(local_datetime&&)      = default;
};

bool operator==(const local_datetime&, const local_datetime&);
bool operator!=(const local_datetime&, const local_datetime&);
bool operator< (const local_datetime&, const local_datetime&);
bool operator<=(const local_datetime&, const local_datetime&);
bool operator> (const local_datetime&, const local_datetime&);
bool operator>=(const local_datetime&, const local_datetime&);

std::ostream& operator<<(std::ostream& os, const local_datetime& dt);
std::string to_string(const local_datetime& dt);
}

メンバ変数 #

local_date date #

local_date date;

日付部分のデータを保持します。

local_time time #

local_time time;

時刻部分のデータを保持します。

メンバ関数 #

デフォルトコンストラクタ #

date, timeの双方をデフォルト構築します。

コンストラクタ(local_date, local_time) #

指定されたdatetimeで構築します。

コンストラクタ(std::tm) #

std::tmから構築します。

タイムゾーンは実行環境でのものが選択されます。

コンストラクタ(std::chrono::system_clock::time_point) #

std::chrono::system_clock::time_pointから構築します。

タイムゾーンは実行環境でのものが選択されます。

コンストラクタ(std::time_t) #

std::time_tから構築します。

タイムゾーンは実行環境でのものが選択されます。

operator std::chrono::system_clock::time_point #

std::chrono::system_clock::time_pointへ変換します。

operator std::time_t #

std::time_tへ変換します。

非メンバ関数 #

比較演算子 #

bool operator==(const local_datetime&, const local_datetime&);
bool operator!=(const local_datetime&, const local_datetime&);
bool operator< (const local_datetime&, const local_datetime&);
bool operator<=(const local_datetime&, const local_datetime&);
bool operator> (const local_datetime&, const local_datetime&);
bool operator>=(const local_datetime&, const local_datetime&);

日付順で比較します。

ストリーム出力演算子 #

std::ostream& operator<<(std::ostream& os, const local_datetime&);

TOMLのデフォルトのフォーマットで出力を行います。

to_string #

std::string to_string(const local_datetime&);

TOMLのデフォルトのフォーマットで文字列化します。

offset_datetime #

namespace toml
{
struct offset_datetime
{
    local_date  date;
    local_time  time;
    time_offset offset;

    offset_datetime(local_date d, local_time t, time_offset o);
    offset_datetime(const local_datetime& dt, time_offset o);
    explicit offset_datetime(const local_datetime& ld);
    explicit offset_datetime(const std::chrono::system_clock::time_point& tp);
    explicit offset_datetime(const std::time_t& t);
    explicit offset_datetime(const std::tm& t);

    operator std::chrono::system_clock::time_point() const;
    operator std::time_t() const;

    offset_datetime() = default;
    ~offset_datetime() = default;
    offset_datetime(offset_datetime const&) = default;
    offset_datetime(offset_datetime&&)      = default;
    offset_datetime& operator=(offset_datetime const&) = default;
    offset_datetime& operator=(offset_datetime&&)      = default;
};

bool operator==(const offset_datetime&, const offset_datetime&);
bool operator!=(const offset_datetime&, const offset_datetime&);
bool operator< (const offset_datetime&, const offset_datetime&);
bool operator<=(const offset_datetime&, const offset_datetime&);
bool operator> (const offset_datetime&, const offset_datetime&);
bool operator>=(const offset_datetime&, const offset_datetime&);

std::ostream& operator<<(std::ostream& os, const offset_datetime& dt);
std::string to_string(const offset_datetime& dt);
}

メンバ変数 #

date #

local_date date;

日付部分のデータを保持します。

time #

local_time time;

時刻部分のデータを保持します。

offset #

time_offset offset;

オフセット部分のデータを保持します。

メンバ関数 #

デフォルトコンストラクタ #

date, time, offsetを全てデフォルト構築します。

コンストラクタ(local_date, local_time, time_offset) #

指定されたdate, time, offsetで構築します。

コンストラクタ(local_datetime, time_offset) #

local_datetimeoffsetから構築します。

コンストラクタ(std::tm) #

std::tmから構築します。

タイムゾーンはUTC(00:00)になります。

コンストラクタ(std::chrono::system_clock::time_point) #

std::chrono::system_clock::time_pointから構築します。

タイムゾーンはUTC(00:00)になります。

コンストラクタ(std::time_t) #

std::time_tから構築します。

タイムゾーンはUTC(00:00)になります。

operator std::chrono::system_clock::time_point #

std::chrono::system_clock::time_pointへ変換します。

タイムゾーンはUTC(00:00)になります。

operator std::time_t #

std::time_tへ変換します。

タイムゾーンはUTC(00:00)になります。

非メンバ関数 #

比較演算子 #

bool operator==(const offset_datetime&, const offset_datetime&);
bool operator!=(const offset_datetime&, const offset_datetime&);
bool operator< (const offset_datetime&, const offset_datetime&);
bool operator<=(const offset_datetime&, const offset_datetime&);
bool operator> (const offset_datetime&, const offset_datetime&);
bool operator>=(const offset_datetime&, const offset_datetime&);

日付順で比較します。

同じ日付の場合、タイムゾーン順で比較されます。

ストリーム出力演算子 #

std::ostream& operator<<(std::ostream& os, const offset_datetime&);

TOMLのデフォルトのフォーマットで出力を行います。

to_string #

std::string to_string(const offset_datetime&);

TOMLのデフォルトのフォーマットで文字列化します。