サイトマップ / C言語講座出入り口総目次目次:時刻と時間>現在時刻と年月日と曜日を表示

青い直線

現在時刻と年月日と曜日を表示

青い直線

[現在の年月日と時刻]←このソース→[ある時刻からの経過時間]

/* 
    #include <time.h>
    time_t  time(time_t *timer);

    例:time(&timer);

前回は、上記に示す時間に関する標準ライブラリ関数 time( ) を使って、グリニッジ標準時1970年1月1日0時0分0秒からの経過時間を得て、自前で、年月日と時間を割り出しました。しかし、標準ライブラリ関数の中にそれをやってくれる関数があります。 */

/* 年月日と時間を表示する関数 */

/* localtime( ) ですが、この関数を呼び出す前に time( ) を呼び出して、timer に経過時間を入れておく必要があります。

    #include <time.h>
    struct tm *localtime(const time_t *timer);

    例:time(&timer);
    date = localtime(&timer);

localtime( ) は、1970年1月1日0時0分0秒からの経過時間を時間を表す構造体 struct tm に変換します。UTC Time ( グリニッジ標準時 ) ではありません。ローカルタイムです。 */

/* 時間を表す構造体 */

/* 時間を表す構造体 struct tm を下記に示します。

    struct tm {
        int tm_sec;        // 秒
        int tm_min;        // 分
        int tm_hour;       // 時
        int tm_mday;       // 日
        int tm_mon;        // 月( 1月=0 )
        int tm_year;       // 西暦年 - 1900
        int tm_wday;       // 曜日( 日=0 )
        int tm_yday;       // 日(年を通して)
        int tm_isdst;      // サマータイムフラグ
    };

asctime( )

asctime( ) は、上記の構造体を下記のような文字列に変換します。

    Tue Feb 28 12:15:56 2000\n\0

    #include <time.h>
    char *asctime(const struct tm *timeptr);

    例:string = asctime(timeptr);

もし、文字列から改行コードを取り除きたい時は、 strlen( ) を使います。

    #include <string.h>
    size_t  strlen(const char *s);

    例:length = strlen(string);

size_t は string.h ファイルの中で、下記のように宣言されています。

    typedef unsigned size_t;
        または
    typedef unsigned long size_t;

strlen( ) を実行すると、文字列の末尾の \0 が現れる迄の字数が返ってきます。asctime( ) の時間を表す文字列では、25 が返ってくるはずです。 25字目は '\n' です。

    string[strlen(string)] = '\0';

で、 '\n' を取り除くことができます。

asctime( ) は、年月日時刻をきまった文字列に変換しますが、表示の仕方を変更できません。独自のフォーマットで表示するには、下記に示す関数 strftime( ) を使います。

strftime( )

    #include <time.h>
    size_t *strftime(char *s, size_t maxsize, const char *format, 
                                                    const struct tm *timeptr);

    例:length = strftime(s, maxsize, format, timeptr);

strftime( ) はtimeptr の指す時刻を、format に従って書式化します。結果は文字列 s に書き込みます。文字列( \0 を含む )の長さが maxsize を越える場合は0を返します。

format で使用する指定子を下記に示します。

指定子 指定子と置き換わる文字
%a 曜日の省略名
%A 曜日名
%b 月の省略名
%B 月の名
%c 日付と時刻 例:14 12:34:56
%d 日付
%H 時間( 00から23 )
%I 時間( 01から12 )
%j 年間の通し日数( 001から366 )
%m 月( 01から12 )
%M 分( 00から59 )
%p AM/PM
%S 秒( 00から59 )
%U 年間の経過週数(日曜を1日目として)
%w 曜日(日曜を0として)
%W 年間の経過週数(月曜を1日目として)
%x 日付 例:02/11/00
%X 時刻 例:12:34 AM
%y 西暦の下二桁
%Y 西暦
%Z タイムゾーンの名
%% %

ソースプログラムの説明

今回のソースプログラムでは、経過時間を取得して、それを時間を表す構造体 date に変換して、asctime( ) と strftime( ) で表示します。 */

/* ここからソースプログラム */

#include <stdio.h>
#include <time.h>
	
void main(void)
{
    time_t timer;
    struct tm *date;
    char str[256];

    timer = time(NULL);          /* 経過時間を取得 */
    date = localtime(&timer);    /* 経過時間を時間を表す構造体 date に変換 */

    printf("printf(\"%%s\\n\", asctime(date));\n");   /* 次の行を表示 */
    printf("%s\n", asctime(date));                    /* 構造体 date を文字列に変換して表示 */


    printf("\"%%Y, %%B, %%d, %%A %%p%%I:%%M:%%S\"\n");    /* 次の行の書式文字列を表示 */
    strftime(str, 255, "%Y, %B, %d, %A %p%I:%M:%S", date);
    printf("%s\n", str);
}

/* ここまでソースプログラム */

/* asctime( ) に似たライブラリ関数に、ctime( ) があります。

    #include <time.h>
    char  *ctime(const time_t *timer);

    例:string = ctime(&timer);

ctime( ) は、localtime( ) を呼ぶことなしに、時間を表す文字列に変換します。以下のコードと同等です。

    asctime(localtime(timer));

この文字列の例を下に示します。この文字列は26文字で、末尾から2番目の文字は改行コードです。

    Tue Feb 28 12:15:56 2000\n\0

*/

[現在の年月日と時刻]←このソース→[ある時刻からの経過時間]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:時刻と時間>現在時刻と年月日と曜日を表示