ちょっと生きづらさを抱えた人へ、気持ちを楽にするためのお手紙です。

システム日付を求める 2【C言語】

システム日付を求めて、指定したフォーマットの文字列に変換する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で日本語の曜日を取得する機会は、あまりないと思います。
ちょっとおもしろいので、一応書いてみました。

コードの著作権は放棄します。

間違ったロケールを設定すると、エラーが返却されますが、本来だったらパラメーターチェックをするのが良いかも。

コメントを残す

メールアドレスが公開されることはありません。