HHの文字列に時間:MM:SSフォーマット(Cプログラミング)
質問
私は「HH:MM:SS」で現在の時刻を取得する必要が文字配列(文字列)に-formatので、私はprintf("%s", timeString);
と、後で簡単に出力結果をすることができます。
私はところでtimeval
とtime_t
種類にかなり混乱しているので、任意の説明は素晴らしいだろう:)
編集: だから私はのstrftimeなどで試みたが、それはちょっと働きました。ここに私のコードは次のとおりです。
time_t current_time;
struct tm * time_info;
char timeString[8];
time(¤t_time);
time_info = localtime(¤t_time);
strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);
しかし、出力はこれです: "13:49:53aの?? J`aS?"
何が最後に "?? J`aS?のの" で起こっている?
解決
あなたは、このコードからゴミを取得している。
time_t current_time;
struct tm * time_info;
char timeString[8];
time(¤t_time);
time_info = localtime(¤t_time);
strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);
あなたは、文字列のNULL終端(\ 0)のためのスペースを許可していないので、文字列、それが印刷されたときに終わりがあるとここで、は、そう、それは知りません一環として、メモリの次のビットでintepretsランダムごみ文字列のます。
このに変更します:
time_t current_time;
struct tm * time_info;
char timeString[9]; // space for "HH:MM:SS\0"
time(¤t_time);
time_info = localtime(¤t_time);
strftime(timeString, sizeof(timeString), "%H:%M:%S", time_info);
puts(timeString);
strftime()
にはに十分なスペースを持っていますので、そして、それは正常に動作します\ 0を追加します。私は両方の場所で番号を変更するのを忘れる危険性を避けるためにはsizeof(配列)を使用していますので注意してください。
他のヒント
あなたが書くことができますのstrftime の機能、を見てみましょうお好みの形式でchar型の配列に時間ます。
#include <stdio.h>
#include <time.h>
/* get seconds since the Epoch */
time_t secs = time(0);
/* convert to localtime */
struct tm *local = localtime(&secs);
/* and set the string */
sprintf(timeString, "%02d:%02d:%02d", local->tm_hour, local->tm_min, local->tm_sec);
時間(時間の壁掛け時計タイプではなく、プロセス/スレッド時間)に対処するための重要なタイプはtime_t
とstruct tm
です。
いくつかの作業を使用すると、1と他の間で変換することができますが、UTC時間に対するローカル時間に注意を払わなければならない。
、<time.h>
での説明を熟読の機能を試してみてくださいあなたがそこまでのGROK のCの時間ます。
ここでも、UTC時刻とローカル時刻に注意を払っています。
所属していません StackOverflow