システム日付を求めて、指定したフォーマットの文字列に変換するC言語の自作関数、第2弾です。
曜日を日本語で取りたいとき用です。
formatにはstrftime()で使えるものを指定できます。
#ifndef TIMEFUNC_H_ #define TIMEFUNC_H_ extern int getSysdate(char *, char *, char *); /* ロケール */ #define FDBC_LOCALE_NON NULL /* ロケール なし */ #define FDBC_LOCALE_JPN "JPN" /* ロケール 日本*/ #endif /* TIMEFUNC_H_ */
#include <stdio.h> #include <string.h> #include <time.h> #include <locale.h> #include "common.h" static struct tm * getLocaltime() { struct tm *t_st; time_t tt; /* 現在時刻取得 */ time(&tt); t_st = localtime(&tt); return t_st; } /** * @brief システム日付取得関数 * システム日付を指定されたフォーマットで返却する * * @param ret[O] 取得したシステム日付 * @param locale[I] 設定するロケール * @param format[I] 返却値の書式フォーマット * @return FDBC_OK * @return FDBC_NG * @author * @date */ int getSysdate(char *ret, char *locale, char *format) { struct tm *t_st; char buf[64]; char *lc; /* システム時刻の取得 */ t_st = getLocaltime(); /* ロケールを設定 */ lc = setlocale(LC_ALL, locale); if (lc == NULL) { /* ロケール取得エラー */ return FDBC_NG; } /* 返却値を成形 */ strftime(buf, sizeof(buf), format, t_st); strcpy(ret, buf); return FDBC_OK; }
#ifndef COMMON_H_ #define COMMON_H_ #define FDBC_OK 0 #define FDBC_NG -1 #endif /* COMMON_H_ */
#include <stdio.h> #include "common.h" #include "timefunc.h" int main(int argc, char *argv[]) { char ymdhms[32]; getSysdate(ymdhms, FDBC_LOCALE_NON, "%Y %B %d %A"); printf("%s\n", ymdhms); getSysdate(ymdhms, FDBC_LOCALE_JPN, "%Y %B %d %A"); printf("%s\n", ymdhms); return FDBC_OK; }
2012 October 07 Sunday 2012 10月 07 日曜日
引数でロケールを切り替えられるようにしています。
実のところ、Cで日本語の曜日を取得する機会は、あまりないと思います。
ちょっとおもしろいので、一応書いてみました。
コードの著作権は放棄します。
間違ったロケールを設定すると、エラーが返却されますが、本来だったらパラメーターチェックをするのが良いかも。