1

タイムスタンプから time_t 値を文字列形式で関数に返したいのですが、取得できません。私は助けが必要です。

「1456242904.226683」などの形式のタイムスタンプ値である Redis データベースの文字列 KEY を読み取りました。

私のコードは次のとおりです。

time_t get_ts(redisContext *ctx)
{
    redisReply *reply;
    reply = redisCommand(ctx, "GET %s", "KEY");
    if(reply == NULL){
        return -1;
    }

    char error[255];
    sprintf(error, "%s", "get_ts 2:",reply->str);
    send_log(error);

    freeReplyObject(reply);

    return reply->str;
}

reply->str は文字列値ですが、time_t 値を返す必要があります。

どうすればできますか?

ありがとう

4

1 に答える 1

1

1456242904.226683 は 1970 年 1 月 1 日 00:00 から経過した秒数であると仮定します。これは約 46 年になります。1456242904.226683 は浮動小数点値でtime_tあり、整数データ型です。1456242904.226683 をtime_t正確に変換することはできませんが、1456242904 を変換することはできます。最初に使用atofして文字列を浮動小数点値に変換し、次に浮動小数点値を次のようにキャストしますtime_t

#include <stdlib.h>     // atof

time_t get_ts(redisContext *ctx)
{
    redisReply *reply;
    reply = redisCommand(ctx, "GET %s", "KEY");
    if(reply == NULL){
        return -1;
    }

    char error[255];
    sprintf(error, "%s", "get_ts 2:",reply->str);
    send_log(error);

    time_t t = (time_t)atof(reply->str);
             // ^^^^^^ ^^^^

    freeReplyObject(reply);

    return t;
}
于 2016-02-23T17:14:01.697 に答える