C++日付と時刻の完全ガイド:ctimeライブラリの活用
C++標準ライブラリは適切な日付型を提供していません。C++は日付と時刻操作のための構造体と関数をC言語から継承しています。C++プログラムで日付と時刻関連の関数や構造体にアクセスするには、<ctime> ヘッダーファイルをインクルードする必要があります。
時間関連の型は4つあります:clock_t、time_t、size_t、tm。clock_t、size_t、time_t 型は、システム時刻と日付を何らかの整数として表現できます。
構造体型 tm は、以下の要素を持つC構造体の形で日付と時刻を保持します:
struct tm {
int tm_sec; // 0〜61の分秒
int tm_min; // 0〜59の時間分
int tm_hour; // 0〜24の時間
int tm_mday; // 1〜31の月日
int tm_mon; // 0〜11の月
int tm_year; // 1900年からの経過年数
int tm_wday; // 日曜からの経過日数
int tm_yday; // 1月1日からの経過日数
int tm_isdst; // 夏時間の時間数
}
CまたはC++で日付と時刻を扱う際に使用する重要な関数:
| No. | 関数と目的 |
|---|---|
| 1 | time_t time(time_t *time); 1970年1月1日から経過した秒数として、システムの現在のカレンダー時刻を返す。システムに時刻がない場合は .1 を返す。 |
| 2 | char *ctime(const time_t *time); 曜日 月 日 時:分:秒 年\n\0 形式の文字列へのポインタを返す。 |
| 3 | struct tm *localtime(const time_t *time); ローカル時刻を表す tm 構造体へのポインタを返す。 |
| 4 | clock_t clock(void); 呼び出しプログラムの実行時間の概算値を返す。時刻が利用できない場合は .1 を返す。 |
| 5 | char * asctime ( const struct tm * time ); time が指す構造体に格納された情報を、曜日 月 日 時:分:秒 年\n\0 形式の文字列に変換したものへのポインタを返す。 |
| 6 | struct tm *gmtime(const time_t *time); tm 構造体の形で時刻へのポインタを返す。時刻は協定世界時(UTC)で表現され、本質的にグリニッジ標準時(GMT)です。 |
| 7 | time_t mktime(struct tm *time); time が指す構造体に見つかった時刻のカレンダー時刻相当値を返す。 |
| 8 | double difftime ( time_t time2, time_t time1 ); time1 と time2 の差を秒単位で計算する。 |
| 9 | size_t strftime(); 日付と時刻を特定の形式でフォーマットするために使用できる。 |
現在の日付と時刻
システムの現在の日付と時刻を、ローカル時刻または協定世界時(UTC)として取得したい場合の例:
Live Demo#include <iostream>
#include <ctime>
using namespace std;
int main() {
// 現在のシステム時刻に基づく現在日時
time_t now = time(0);
// nowを文字列形式に変換
char* dt = ctime(&now);
cout << "The local date and time is: " << dt << endl;
// nowをUTC用のtm構造体に変換
tm *gmtm = gmtime(&now);
dt = asctime(gmtm);
cout << "The UTC date and time is:"<< dt << endl;
}
上記コードをコンパイルして実行すると、以下の結果が得られます:
The local date and time is: Sat Jan 8 20:07:41 2011 The UTC date and time is:Sun Jan 9 03:07:41 2011
struct tm を使った時刻フォーマット
tm 構造体は、CまたはC++で日付と時刻を扱う上で非常に重要です。この構造体は、上記のようにC構造体の形で日付と時刻を保持します。ほとんどの時刻関連関数は tm 構造体を利用します。さまざまな日付・時刻関連関数と tm 構造体を使用する例:
この章で構造体を使用する際、C言語の構造体の基本的な理解と、アロー演算子 -> を使った構造体メンバへのアクセス方法を理解していることを前提としています。
Live Demo#include <iostream>
#include <ctime>
using namespace std;
int main() {
// 現在のシステム時刻に基づく現在日時
time_t now = time(0);
cout << "Number of sec since January 1,1970 is:: " << now << endl;
tm *ltm = localtime(&now);
// tm構造体の各コンポーネントを出力
cout << "Year:" << 1900 + ltm->tm_year << endl;
cout << "Month: " << 1 + ltm->tm_mon << endl;
cout << "Day: " << ltm->tm_mday << endl;
cout << "Time: " << 5+ltm->tm_hour << ":";
cout << 30+ltm->tm_min << ":";
cout << ltm->tm_sec << endl;
}
上記コードをコンパイルして実行すると、以下の結果が得られます:
Number of sec since January 1,1970 is:: 1588485717 Year:2020 Month: 5 Day: 3 Time: 11:31:57
C言語
- リアクティブDC回路における電圧と電流の計算
- C++構造体とクラス:組み込み開発者のための実践ガイド
- C++変数・リテラル・定数完全ガイド:基礎から実践まで
- C++クラスとオブジェクト完全ガイド:オブジェクト指向プログラミングの実践
- C++メモリ管理の極意:newとdeleteのエキスパート活用法
- C++ public/protected/private継承の違いを徹底解説
- C++フレンド関数とフレンドクラス:アクセス制御のマスター
- C++オーバーロード完全マスター:関数と演算子のオーバーロード
- C++ファイルI/O完全マスター:fstreamによる読み書き
- Pythonで現在の日付と時刻を取得する実践ガイド
- Java 8 新Date/Time API徹底解説:堅牢で使いやすい日付時刻処理