アイエスエス株式会社 "Innovative System Solutions"
気まぐれ Programming TIPS 【2】
【2】 現在時刻の取得(C)
気まぐれに思いついた内容を、備忘録的に殴り書くものでございます。
今回は現在時刻を取得する方法について。
現在時刻を取得するには、標準Cライブラリのtime関数を使います。
time_t time(time_t *time);
引数timeは時刻の格納場所へのポインタ。
戻り値は1970年1月1日0時以降の経過秒数。
time関数で取得できるシステム時刻は、経過秒数なのでわかりやすい形に変換する。
struct tm *localtime(const time_t time);
tm構造体のメンバは以下の通り、
tm_sec – 秒(0~59)
tm_min – 分(0~59)
tm_hour – 時間(0~23)
tm_mday – 日(1~31)
tm_mon – 月(0~11、1月=0)
tm_year – 年(実際の西暦から1900を引いた数)
tm_wday – 曜日(0~6、日曜日=0)
tm_yday – 年内の通産日(0~365、1月1日=0)
tm_isdst – 夏時間が有効な場合は正の値、夏時間が無効な場合は0、夏時間がどうかが不明な場合は負の値
time関数で取得したtime_t変数をlocaltime関数に渡すと、
タイムゾーンに合わせてtm構造体に変換される。
以下サンプルコード
char week[7][3] = {"日","月","火","水","木","金","土"}; time_t time_now; struct tm *local; time(&time_now); local = localtime(&time_now); printf("%d年%02d月%02d日(%s)\n",local->tm_year+1900,local->tm_mon+1,local->tm_mday,week[local->tm_wday]); printf("%02d時%02d分%02d秒\n", local->tm_hour, local->tm_min, local->tm_sec);
実行結果
2009年08月17日(月)
14時02分15秒
猫マスコット第一段完成
●砂時計カーソル解消
これまで,猫にカーソルを合わせると砂時計にされたり(されなかったり)していて,「なんで?ぼうやだから??」と残念に思っていましたが,原因はどうやらウィンドウクラス登録時にカーソルを指定していなかったためのようです(安易にNULLを食わしていたことが判明…).
LoadCursor( NULL, IDC_ARROW ) を食わせることで無事に解消できたようです.
●アニメーションを微増してとりあえずの第一段!
絵を描くのが大変です.
「歩行パターンとかで右足と左足の区別をつけなくていい」というメリットを考えて猫を一色べた塗りのデザインにしたのですが,これによって奥行き的な方向の変化を表現できないというデメリットが発生中.
「動く興味対象にとびかかる前に体勢を低くしつつお尻を振り振りする構え」等が描けなくなってしまいました.畜生,畜生ー!
あと,アニメーションの切り替わり時に(画像サイズが違ったり,猫の位置が違ったりするので)ウィンドウを移動させて位置をうまく合わせるひつようがあるのですが,これがまた大変です(フレーム毎に猫位置が違ったりするから).
そのような問題を乗り越えつつ(描けないものはあきらめつつ),アニメーションパターンをいくつか増やし,とりあえずの第一段完成とします.
苦労のわりには少ない採用パターンたち.ニャーン.
[ここから黒猫デスクトップマスコット第一段をダウンロードできます]
●第一段の問題点
前述のように,アニメーション間の位置合わせ等が面倒なのですが,現在,その移動量等がなんと「直値がハードコーディング」されています.ひどい悪夢ですね.
というわけで,まずはそのような設定というか,アニメーション制御の部分を外部ファイルから読み込むようにしたいところです.
(一番先にやっとくべきことなハズなのですが,外部ファイルの仕様とか考えだすとそこで止まったままモチベーションが切れる体質なので……)
今後,時間が取れたらLua辺りでアニメーション制御できるようにしていきたいと考えています.
(利用側でカスタマイズ可能にしておけば,誰かが絵を描いてくれるかもしれませんし)