8

エポックからの秒数を表す time_t 値から、時間、分、秒を整数値として抽出したいと考えています。

時間の値が正しくありません。なんで?

#include <stdio.h>
#include <time.h>

#include <unistd.h>

int main()
{
    char buf[64];

    while (1) {
        time_t t = time(NULL);
        struct tm *tmp = gmtime(&t);

        int h = (t / 360) % 24;  /* ### My problem. */
        int m = (t / 60) % 60;
        int s = t % 60;

        printf("%02d:%02d:%02d\n", h, m, s);

        /* For reference, extracts the correct values. */
        strftime(buf, sizeof(buf), "%H:%M:%S\n", tmp);
        puts(buf);
        sleep(1);
    }
}

出力 (時間は 10 である必要があります)

06:15:35
10:15:35

06:15:36
10:15:36

06:15:37
10:15:37
4

2 に答える 2

14
int h = (t / 3600) % 24;  /* ### Your problem. */
于 2012-06-28T10:31:14.913 に答える
7

あなたの呼び出しはgmtime()すでにそれを行っています。結果struct tmにはすべてのフィールドがあります。ドキュメントを参照してください。

言い換えれば、ちょうど

printf("hours is %d\n", tmp->tm_hour);

コードで手動で変換を行うために恐ろしいほど大きな数を使用することを避けるため、これが適切な方法であると私は主張します。これは、他の誰かの問題にする (つまり、抽象化する) ことによって、最善の方法で行います。したがって、不足している を追加するの0ではなく、 を使用してコードを修正してくださいgmtime()

タイムゾーンについても考えてください。

于 2012-06-28T10:29:45.390 に答える