nlib
nn::nlib::DateTime クラスfinal

日時を表すクラスです。 [詳解]

#include "nn/nlib/DateTime.h"

公開型

enum  Week {
  WEEK_SUNDAY = 0,
  WEEK_MONDAY,
  WEEK_TUESDAY,
  WEEK_WEDNESDAY,
  WEEK_THURSDAY,
  WEEK_FRIDAY,
  WEEK_SATURDAY
}
 曜日を表す定数です。 [詳解]
 

公開メンバ関数

errno_t Init (int year, int month, int day, int hour=0, int min=0, int sec=0, int msec=0, int usec=0) noexcept
 日時を初期化します。 [詳解]
 
errno_t Init (const DateTimeParams &rhs) noexcept
 DateTimeParams構造体を用いて日時を初期化します。無効な日時が与えられた場合はEINVALを返します。
 
errno_t Init (const TimeValue &tv) noexcept
 TimeValue構造体を用いて日時を初期化します。無効な日時が与えられた場合はEINVALを返します。
 
errno_t GetDay (int *year, int *month, int *day) const noexcept
 年月日を取得します。 [詳解]
 
errno_t GetTime (int *hour, int *min, int *sec, int *msec, int *usec) const noexcept
 時刻を取得します。 [詳解]
 
errno_t Get (DateTimeParams *rhs) const noexcept
 時刻を取得します。 [詳解]
 
TimeValue ToTimeValue () const noexcept
 TimeValueオブジェクトを返します。
 
bool IsValid () const noexcept
 有効な時刻かどうかをチェックします。 [詳解]
 
errno_t GetDayOfYear (int *nth) const noexcept
 日時がその年の何番目の日であるかを取得します。 [詳解]
 
errno_t GetDayOfWeek (Week *week) const noexcept
 何曜日かを取得します。 [詳解]
 
errno_t Add (const TimeSpan &rhs) noexcept
 rhs で指定した期間を日時に加算します。 [詳解]
 
errno_t AddYears (int value) noexcept
 value で指定した年数を日時に加算します。 [詳解]
 
errno_t AddMonths (int value) noexcept
 value で指定した月数を日時に加算します。 [詳解]
 
errno_t AddDays (double value) noexcept
 value で指定した日数を日時に加算します。 [詳解]
 
errno_t AddHours (double value) noexcept
 value で指定した時間数を日時に加算します。 [詳解]
 
errno_t AddMinutes (double value) noexcept
 value で指定した分数を日時に加算します。 [詳解]
 
errno_t AddSeconds (double value) noexcept
 value で指定した秒数を日時に加算します。 [詳解]
 
errno_t AddMilliSeconds (double value) noexcept
 value で指定したミリ秒数を日時に加算します。 [詳解]
 
errno_t AddMicroSeconds (double value) noexcept
 value で指定したマイクロ秒数を日時に加算します。 [詳解]
 
errno_t ToW3cDtf (char(&str)[32], const TimeSpan &zone) const noexcept
 日時をW3C-DTF形式の文字列で出力します。 [詳解]
 
errno_t ToW3cDtf (char(&str)[32]) const noexcept
 ToW3cDtf(str, TimeSpan()) を呼び出します。
 
errno_t ToRfc2822 (char(&str) [32], const TimeSpan &zone) const noexcept
 日時をRFC2822形式の文字列で出力します。 [詳解]
 
errno_t ToRfc2822 (char(&str)[32]) const noexcept
 ToRfc2822(str, TimeSpan()) を呼び出します。
 
errno_t ToAscTime (char(&str)[26]) const noexcept
 日時をasctime形式の文字列で出力します。末尾に改行文字が入ることに注意してください。 [詳解]
 
 operator bool () const
 保持している時刻が有効ならばtrueを返します。
 
DateTimeoperator+= (const TimeSpan &rhs) noexcept
 rhs で示される時間を加算します。
 
DateTimeoperator-= (const TimeSpan &rhs) noexcept
 rhs で示される時間を減算します。
 
bool operator== (const DateTime &rhs) const noexcept
 rhs と同一時刻ならばtrueを返します。
 
bool operator!= (const DateTime &rhs) const noexcept
 rhs と同一時刻でないならtrueを返します。
 
bool operator< (const DateTime &rhs) const noexcept
 rhs より過去の時刻ならtrueを返します。
 
bool operator> (const DateTime &rhs) const noexcept
 rhs より未来の時刻ならtrueを返します。
 
bool operator<= (const DateTime &rhs) const noexcept
 rhs と同じかより過去の時刻ならtrueを返します。
 
bool operator>= (const DateTime &rhs) const noexcept
 rhs と同じかより未来の時刻ならtrueを返します。
 
 DateTime (const struct timespec *tm) noexcept
 timespec構造体からオブジェクトを構築します。
 
void ToTimeSpec (struct timespec *tm) const noexcept
 timespec構造体の値に変換します。
 
基本的なメンバ関数
constexpr DateTime () noexcept
 デフォルトコンストラクタです。無効な時刻で初期化します。
 

静的公開メンバ関数

static bool IsLeapYear (int year) noexcept
 閏年かどうかをチェックします。 [詳解]
 
static errno_t GetNow (DateTime *p) noexcept
 現在の時刻からDateTimeを設定します。 [詳解]
 
static int GetDaysInMonth (int year, int month) noexcept
 年月を指定してその月が何日あるかを取得します。 [詳解]
 
static errno_t Parse (const char *str, DateTime *dt, TimeSpan *delta) noexcept
 日時を表記した文字列をパースしてDateTimeオブジェクトとTimeSpanオブジェクトを設定します。 [詳解]
 

詳解

日時を表すクラスです。

説明
西暦1年1月1日00::00から西暦9999年12月31日23:59:59.999までの日時を表現できます。 1日は正確に86400秒であるとして日時を扱います。
内部では100ナノ秒を1として64bitの整数で日時を表現しています。 各種メンバ関数や演算子を利用して日時の比較や加減算等を行うことができます。
また、TimeSpanオブジェクトの加算と減算がサポートされています。
// 数値を指定して日付を設定
dt.Init(1973, 11, 10);
// 現在時間からオブジェクトを設定
// 文字列からオブジェクトを設定
TimeSpan delta;
DateTime::Parse("1994-11-05T08:15:30-05:00", &dt, &delta);
// 一月進める
dt.AddMonths(1);
各種例:
misc/datetime/datetime.cpp, misc/threading/tls/tls.cpp, msgpack/jsonrpc/jsonrpc.cpp, msgpack/jsonrpc/server.cpp.

DateTime.h248 行目に定義があります。

列挙型メンバ詳解

§ Week

曜日を表す定数です。

列挙値
WEEK_SUNDAY 

日曜日

WEEK_MONDAY 

月曜日

WEEK_TUESDAY 

火曜日

WEEK_WEDNESDAY 

水曜日

WEEK_THURSDAY 

木曜日

WEEK_FRIDAY 

金曜日

WEEK_SATURDAY 

土曜日

DateTime.h251 行目に定義があります。

関数詳解

§ Add()

nn::nlib::DateTime::Add ( const TimeSpan rhs)
inlinenoexcept

rhs で指定した期間を日時に加算します。

引数
[in]rhs期間
戻り値
成功ならば0, DateTimeが無効であるか無効になる場合はERANGE

DateTime.h402 行目に定義があります。

§ AddDays()

nn::nlib::DateTime::AddDays ( double  value)
inlinenoexcept

value で指定した日数を日時に加算します。

引数
[in]value日数
戻り値
成功ならば0, DateTimeが無効であるか無効になる場合はERANGE

DateTime.h407 行目に定義があります。

§ AddHours()

nn::nlib::DateTime::AddHours ( double  value)
inlinenoexcept

value で指定した時間数を日時に加算します。

引数
[in]value時間数
戻り値
成功ならば0, DateTimeが無効であるか無効になる場合はERANGE

DateTime.h413 行目に定義があります。

§ AddMicroSeconds()

nn::nlib::DateTime::AddMicroSeconds ( double  value)
inlinenoexcept

value で指定したマイクロ秒数を日時に加算します。

引数
[in]valueマイクロ秒数
戻り値
成功ならば0, DateTimeが無効であるか無効になる場合はERANGE

DateTime.h437 行目に定義があります。

§ AddMilliSeconds()

nn::nlib::DateTime::AddMilliSeconds ( double  value)
inlinenoexcept

value で指定したミリ秒数を日時に加算します。

引数
[in]valueミリ秒数
戻り値
成功ならば0, DateTimeが無効であるか無効になる場合はERANGE

DateTime.h431 行目に定義があります。

§ AddMinutes()

nn::nlib::DateTime::AddMinutes ( double  value)
inlinenoexcept

value で指定した分数を日時に加算します。

引数
[in]value分数
戻り値
成功ならば0, DateTimeが無効であるか無効になる場合はERANGE

DateTime.h419 行目に定義があります。

§ AddMonths()

nn::nlib::DateTime::AddMonths ( int  value)
noexcept

value で指定した月数を日時に加算します。

引数
[in]value月数
戻り値
成功ならば0, DateTimeが無効であるか無効になる場合はERANGE
説明
加算後の日付が存在しない場合(2000-2-29)は、該当月の末日に設定されます。

§ AddSeconds()

nn::nlib::DateTime::AddSeconds ( double  value)
inlinenoexcept

value で指定した秒数を日時に加算します。

引数
[in]value秒数
戻り値
成功ならば0, DateTimeが無効であるか無効になる場合はERANGE

DateTime.h425 行目に定義があります。

§ AddYears()

nn::nlib::DateTime::AddYears ( int  value)
noexcept

value で指定した年数を日時に加算します。

引数
[in]value年数
戻り値
成功ならば0, DateTimeが無効であるか無効になる場合はERANGE
説明
加算後の日付が存在しない場合(2000-2-29)は、該当月の末日に設定されます。

§ Get()

nn::nlib::DateTime::Get ( DateTimeParams rhs) const
noexcept

時刻を取得します。

引数
[out]rhs時刻が書き込まれる構造体へのポインタ
戻り値
成功した場合は0, DateTimeが無効な場合はERANGE

§ GetDay()

nn::nlib::DateTime::GetDay ( int *  year,
int *  month,
int *  day 
) const
noexcept

年月日を取得します。

引数
[out]year年(1-9999)
[out]month月(1-12)
[out]day日(1-)
戻り値
成功した場合は0, DateTimeが無効な場合はERANGE

§ GetDayOfWeek()

nn::nlib::DateTime::GetDayOfWeek ( Week week) const
noexcept

何曜日かを取得します。

引数
[out]week曜日
戻り値
成功ならば0, DateTimeが無効な場合はERANGE

§ GetDayOfYear()

nn::nlib::DateTime::GetDayOfYear ( int *  nth) const
noexcept

日時がその年の何番目の日であるかを取得します。

引数
[out]nthその年の初めから数えた日数(0から数える)
戻り値
成功ならば0, DateTimeが無効な場合はERANGE

§ GetDaysInMonth()

nn::nlib::DateTime::GetDaysInMonth ( int  year,
int  month 
)
staticnoexcept

年月を指定してその月が何日あるかを取得します。

引数
[in]year
[in]month
戻り値
0以外ならばその月の日数、0ならばエラー

§ GetNow()

nn::nlib::DateTime::GetNow ( DateTime p)
staticnoexcept

現在の時刻からDateTimeを設定します。

引数
[out]pDateTimeオブジェクトへのポインタ
戻り値
成功ならば0, 失敗ならばそれ以外

§ GetTime()

nn::nlib::DateTime::GetTime ( int *  hour,
int *  min,
int *  sec,
int *  msec,
int *  usec 
) const
noexcept

時刻を取得します。

引数
[out]hour時(1-23)
[out]min分(0-59)
[out]sec秒(0-59)
[out]msecミリ秒(0-999)
[out]usecマイクロ秒(0-999)
戻り値
成功した場合は0, DateTimeが無効な場合はERANGE

§ Init()

nn::nlib::DateTime::Init ( int  year,
int  month,
int  day,
int  hour = 0,
int  min = 0,
int  sec = 0,
int  msec = 0,
int  usec = 0 
)
noexcept

日時を初期化します。

引数
[in]year年(1-1999)
[in]month月(1-12)
[in]day日(1-)
[in]hour時間(0-23)
[in]min分(0-59)
[in]sec秒(0-59)
[in]msecミリ秒(0-999)
[in]usecマイクロ秒(0-999999)
戻り値
成功した場合は0, 無効な日時が与えられた場合はEINVAL

§ IsLeapYear()

nn::nlib::DateTime::IsLeapYear ( int  year)
inlinestaticnoexcept

閏年かどうかをチェックします。

引数
[in]yearチェックする年
戻り値
閏年ならばtrue, そうでなければfalse

DateTime.h382 行目に定義があります。

§ IsValid()

nn::nlib::DateTime::IsValid ( ) const
noexcept

有効な時刻かどうかをチェックします。

戻り値
有効(西暦1年1月1日00::00から西暦9999年12月31日23:59:59.999まで)ならばtrue

§ Parse()

nn::nlib::DateTime::Parse ( const char *  str,
DateTime dt,
TimeSpan delta 
)
staticnoexcept

日時を表記した文字列をパースしてDateTimeオブジェクトとTimeSpanオブジェクトを設定します。

引数
[in]str日時を表記した文字列
[out]dt日時情報が格納されます。
[out]deltaタイムゾーン(+09:00等)の期間が格納されます。
戻り値
成功した場合は0, それ以外の場合はエラー
説明
日時の表記はW3C-DTF, RFC2822, asctime形式をサポートしています。
なお、W3C-DTFの場合で、'-'を'/'に、'T'を' 'に置き換えてもパースすることができます。 つまり、以下のような標準通りではない文字列をパースすることも可能です。
  • 2012/09/10
  • 2012/09/10 17:27
参照
http://www.w3.org/TR/NOTE-datetime (W3C-DTF)
https://www.ietf.org/rfc/rfc2822.txt (RFC2822)
http://srgia.com/docs/rfc2822j.html (RFC2822, in Japanese)

§ ToAscTime()

nn::nlib::DateTime::ToAscTime ( char(&)  str[26]) const
noexcept

日時をasctime形式の文字列で出力します。末尾に改行文字が入ることに注意してください。

引数
[out]str26バイトの出力文字列用バッファ
戻り値
成功ならば0, DateTimeが無効である場合はERANGE

§ ToRfc2822()

nn::nlib::DateTime::ToRfc2822 ( char(&)  str[32],
const TimeSpan zone 
) const
noexcept

日時をRFC2822形式の文字列で出力します。

引数
[out]str32バイトの出力文字列用バッファ
[in]zoneタイムゾーン
戻り値
成功ならば0, DateTimeが無効である場合はERANGE

§ ToW3cDtf()

nn::nlib::DateTime::ToW3cDtf ( char(&)  str[32],
const TimeSpan zone 
) const
noexcept

日時をW3C-DTF形式の文字列で出力します。

引数
[out]str32バイトの出力文字列用バッファ
[in]zoneタイムゾーン
戻り値
成功ならば0, DateTimeが無効である場合はERANGE

このクラス詳解は次のファイルから抽出されました: