MGL::System::DateTime#

概要#

MGL::System::DateTimeは日付と時刻を表すための構造体です。

この構造体はUNIXエポック時間 (MGL::System::EpochTime) を人間が読みやすい形式に変換する目的で用意されています。主に日付と時刻の表示に使用することを想定しており、内部的な時間の管理にはこの構造体ではなくUNIXエポック時間を使用することを推奨します。

ヒント

日付と時刻で時間を管理する方法は、時差や閏年などが絡み大変煩雑になるため推奨されません。

宣言#

namespace MGL::System
{
    struct DateTime;
}

メンバ情報#

種類

名前

内容

バージョン

関数

コンストラクタ

1.0.0+

メンバ変数

year

年を表す値

1.0.0+

メンバ変数

month

月を表す値

1.0.0+

メンバ変数

day

日を表す値

1.0.0+

メンバ変数

hour

時を表す値

1.0.0+

メンバ変数

minute

分を表す値

1.0.0+

メンバ変数

second

秒を表す値

1.0.0+

メンバ変数

timeDifference

時差を表す値

1.1.12+


コンストラクタ#

宣言#

namespace MGL::System
{
    struct DateTime
    {
        // (1) 初期値で初期化
        constexpr DateTime() noexcept;

        // (2) UNIXエポック時間と時差で初期化
        DateTime(EpochTime epochTime, int32_t inTimeDifference = 0) noexcept;
    };
}

引数#

(1) 初期値で初期化

引数なし

(2) UNIXエポック時間と時差で初期化
MGL::System::EpochTime epochTime

UNIXエポック時間

int32_t inTimeDifference

時差

説明#

この構造体のコンストラクタです。

(1) はUNIXエポック時間の基準値である1970年1月1日0時0分0秒で各メンバを初期化します。

(2) はUNIXエポック時間と時差で初期化します。引数epochTimeにはMGL::System::EpochTime型の時間を、inTimeDifferenceには時差を秒単位で指定してください。時差の指定は省略可能で、その場合は0として扱われます。

UNIXエポック時間についてはMGL::System::EpochTimeを参照してください。

利用例#

2038年問題が発生する時間を日付と時刻に変換して表示する例
// 2038年問題が発生するUNIXエポック時間 (32ビット符号付き整数がオーバーフローする時間)
constexpr const MGL::System::EpochTime y2038ProblemTime = 0x80000000;

// UNIXエポック時間でDateTime構造体を初期化
MGL::System::DateTime dateTime(y2038ProblemTime);

// 構造体の内容を表示
MGL_TRACE("2038年問題が発生する時間: %d-%02d-%02d %02d:%02d:%02d",
            dateTime.year,
            dateTime.month,
            dateTime.day,
            dateTime.hour,
            dateTime.minute,
            dateTime.second);
実行結果
2038年問題が発生する時間: 2038-01-19 03:14:08

注釈

MGLはMGL::System::EpochTimeが64ビット以上である事を必須としているため、2038年問題を起こすことはありません。

関連#


year#

年を表す値

宣言#

namespace MGL::System
{
    struct DateTime
    {
        uint16_t year;
    };
}

説明#

日付の年を表す値です。

バージョン情報#

MGL 1.0.0
  • 初回リリース


month#

月を表す値

宣言#

namespace MGL::System
{
    struct DateTime
    {
        uint8_t month;
    };
}

説明#

日付の月を表す値です。この値は通常、1から12の間の値で表現されます。

バージョン情報#

MGL 1.0.0
  • 初回リリース


day#

日を表す値

宣言#

namespace MGL::System
{
    struct DateTime
    {
        uint8_t day;
    };
}

説明#

日付の日を表す値です。この値は通常、1から31の間の値で表現されます。

バージョン情報#

MGL 1.0.0
  • 初回リリース


hour#

時を表す値

宣言#

namespace MGL::System
{
    struct DateTime
    {
        uint8_t hour;
    };
}

説明#

時刻の時を表す値です。この値は通常、0から23の間の値で表現されます。

バージョン情報#

MGL 1.0.0
  • 初回リリース


minute#

分を表す値

宣言#

namespace MGL::System
{
    struct DateTime
    {
        uint8_t minute;
    };
}

説明#

時刻の分を表す値です。この値は通常、0から59の間の値で表現されます。

バージョン情報#

MGL 1.0.0
  • 初回リリース


second#

秒を表す値

宣言#

namespace MGL::System
{
    struct DateTime
    {
        uint8_t second;
    };
}

説明#

時刻の秒を表す値です。この値は通常、0から59の間の値で表現されます。

バージョン情報#

MGL 1.0.0
  • 初回リリース


timeDifference#

時差を表す値

宣言#

namespace MGL::System
{
    struct DateTime
    {
        int32_t timeDifference;
    };
}

説明#

各々のパラメータに適用済みの時差を表す値です。この値は初期化時に指定された時差を秒単位で表現します。

この値は通常、-43200 (-12時間)から43200 (+12時間)の間で表現されます。

バージョン情報#

MGL 1.1.12
  • 初回リリース