Linux Cプログラミング:現在のシステム時刻を取得する
現在のシステム時刻を取得することは、たとえば、ソフトウェアのデバッグや、ソフトウェア操作で実行ログのコンパイルのために現在の時刻を取得する必要がある場合などに非常に役立ちます。Linuxのシステム時刻に関連する関数とデータ型は、システムのヘッダーファイル<time.h>で定義されています。次の関数は、システム時刻を取得するプログラムを作成するときに主に使用されます。
関数名 | 注釈 |
---|---|
時間() | この関数によって返される結果は、1970年1月1日の0:00:00(通常)から現在の時刻までの秒数です。 |
現地時間() | この関数は、time()によって返されたtime_tタイプのデータを現在のシステムのリアルタイムに変換し、変換結果を返すことができます。 |
strftime() | この関数は、ロケールに従って現地の時刻/日付をフォーマットしたり、時間文字列をフォーマットしたりするために使用されます |
strftime時間フォーマット関数の 使用に関連する関連パラメーターの意味は次のとおりです。
パラメータ | 意味 |
---|---|
%F | 時刻を年-月-日としてフォーマットします |
%T | 時間、分、秒を表示する時間をフォーマットします:hh:mm:ss |
%Y | 時間を世紀の部分を含む小数年としてフォーマットします |
%m | 時刻を10進数の月としてフォーマットします |
%d | 時刻を小数としてフォーマットする月の日 |
%H | 24時間制で時間を時間としてフォーマットします |
%M | 時間を10進数の分としてフォーマットします |
%S | 時間を10進数の秒数としてフォーマットします |
パラメータ分析の詳細については、strftimeの紹介を参照してください。
時間変数に関連するデータ型の定義:
データの種類 | 意味 |
---|---|
time_t | Cでは、time_tは、1970年1月1日の0:00:00(通常)から現在の時刻までの秒数を表すために使用される長整数データを表します。 |
ヘッダーファイルのソースファイルで関連する定義を見つけましょう。まず、<time.h>ヘッダーファイルがどこにあるかを確認し、whereisコマンドを使用してファイルを検索します。
whereis time.h
結果は次のとおりです
。ヘッダーファイルの構造体tmには、年、月、日、時、分、秒などの時間に関する基本情報が含まれています。
/* Used by other time functions. */
struct tm
{
int tm_sec; /* Seconds. [0-60] (1 leap second) */
int tm_min; /* Minutes. [0-59] */
int tm_hour; /* Hours. [0-23] */
int tm_mday; /* Day. [1-31] */
int tm_mon; /* Month. [0-11] */
int tm_year; /* Year - 1900. */
int tm_wday; /* Day of week. [0-6] */
int tm_yday; /* Days in year.[0-365] */
int tm_isdst; /* DST. [-1/0/1]*/
# ifdef __USE_MISC
long int tm_gmtoff; /* Seconds east of UTC. */
const char *tm_zone; /* Timezone abbreviation. */
# else
long int __tm_gmtoff; /* Seconds east of UTC. */
const char *__tm_zone; /* Timezone abbreviation. */
# endif
};
Linuxで現在のシステム時刻を達成し、YYYY-MM-dd hh:mm:ssの形式で出力するためのプログラミング用の関連関数の実際のアプリケーション。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
char* getNowtime(void)
{
static char s[30]={
0};
char YMD[15] = {
0};
char HMS[10] = {
0};
time_t current_time;
struct tm* now_time;
char *cur_time = (char *)malloc(21*sizeof(char));
time(¤t_time);
now_time = localtime(¤t_time);
strftime(YMD, sizeof(YMD), "%F ", now_time);
strftime(HMS, sizeof(HMS), "%T", now_time);
strncat(cur_time, YMD, 11);
strncat(cur_time, HMS, 8);
printf("\nCurrent time: %s\n\n", cur_time);
memcpy(s, cur_time, strlen(cur_time)+1);
free(cur_time);
cur_time = NULL;
return s;
}
int main(void)
{
getNowtime();
return 0;
}
コンパイル後の実行結果を次の図に示します。