【C言語】日付を書式を指定して任意の文字列に変換する

この記事では、C言語で日付を特定の書式に変換する方法について解説します。

目次から探す

日付の書式指定

日付を特定の書式に変換することは、プログラミングにおいて非常によく行われる作業です。

C言語では、日付を書式指定するための関数が用意されています。

この記事では、C言語で日付を書式指定する方法について解説します。

書式指定文字列の一覧

C言語では、日付を書式指定するために以下の書式指定文字列を使用します。

書式指定文字列意味
%Y年(4桁)
%y年(2桁)
%m月(2桁)
%d日(2桁)
%H時(24時間制、2桁)
%I時(12時間制、2桁)
%M分(2桁)
%S秒(2桁)
%A曜日(英語のフルネーム)
%a曜日(英語の省略形)
%B月(英語のフルネーム)
%b月(英語の省略形)

これらの書式指定文字列を組み合わせることで、任意の日付の書式を作成することができます。

書式指定文字列の使い方

C言語では、strftime関数を使用して日付を書式指定します。

strftime関数は、以下のような形式で使用します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t t = time(NULL);
    struct tm *tm = localtime(&t);
    
    char buffer[100];
    strftime(buffer, sizeof(buffer), "書式指定文字列", tm);
    
    printf("%s\n", buffer);
    
    return 0;
}

上記のコードでは、現在の日付を取得し、strftime関数を使用して書式指定文字列に従って変換しています。

変換結果は、bufferという文字列配列に格納され、printf関数で表示されます。

以下に、いくつかの書式指定文字列の例を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t t = time(NULL);
    struct tm *tm = localtime(&t);
    
    char buffer[100];
    strftime(buffer, sizeof(buffer), "%Y/%m/%d", tm);
    printf("%s\n", buffer);
    
    strftime(buffer, sizeof(buffer), "%H:%M:%S", tm);
    printf("%s\n", buffer);
    
    strftime(buffer, sizeof(buffer), "%A, %B %d, %Y", tm);
    printf("%s\n", buffer);
    
    return 0;
}

上記のコードでは、それぞれ年月日、時分秒、曜日と月のフルネームを表示する書式指定文字列を使用しています。

実行結果は以下のようになります。

2022/01/01
12:34:56
Saturday, January 01, 2022

これらの例を参考にしながら、自分のプログラムで必要な書式指定文字列を組み合わせて使ってみてください。

日付の変換方法

日付を特定の書式に変換するためには、C言語のstrftime関数を使用します。

strftime関数は、指定した書式に従って日付を文字列に変換する機能を持っています。

strftime関数を使った日付の変換方法

strftime関数は、以下のような形式で使用します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t now;
    struct tm *local;
    char buffer[80];
    time(&now);
    local = localtime(&now);
    strftime(buffer, sizeof(buffer), "書式指定文字列", local);
    printf("変換結果: %s\n", buffer);
    return 0;
}

このコードでは、現在の日付を取得し、strftime関数を使って指定した書式に従って変換しています。

変換結果は、bufferという文字列配列に格納され、printf関数を使って表示しています。

例を交えた具体的なコードの説明

具体的な例として、年月日を「YYYY年MM月DD日」の形式で表示するコードを作成してみましょう。

#include <stdio.h>
#include <time.h>
int main() {
    time_t now;
    struct tm *local;
    char buffer[80];
    time(&now);
    local = localtime(&now);
    strftime(buffer, sizeof(buffer), "%Y/%m/%d", local);
    printf("変換結果: %s\n", buffer);
    return 0;
}

このコードでは、strftime関数の第3引数に%Y年%m月%d日という書式指定文字列を指定しています。

%Yは年を4桁で表示し、%mは月を2桁で表示し、%dは日を2桁で表示することを意味します。

実行結果は以下のようになります。

変換結果: 2022/01/01

このように、strftime関数を使うことで、日付を任意の書式に変換することができます。

書式指定文字列を適切に指定することで、さまざまな形式の日付表示が可能です。

目次から探す