2016-02-23 3 views
1

Я хочу вернуть функцию значение time_t из timestamp в строковом формате, но я не понимаю. Мне нужна помощь.C: string to milisecs timestamp

Я прочитал строку КЛЮЧ базы данных Redis, что это значение временной метки с формой, например, «+1456242904,226683»

Мой код:

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-> ул является строкой но мне нужно вернуть значение time_t.

Как я могу это сделать?

Благодаря

+3

после 'freeReplyObject() ', вы никак не можете« вернуть »член. –

+0

Right @ sourav-ghosh. По электронной почте Ой! Сожалею. Я попытался возобновить свой вопрос. О_О –

ответ

1

Я предполагаю, что +1456242904,226683 являются секунды, прошедшие с 00:00, 1 января 1970. Это было около 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; 
} 
+0

Rabbid, ваше решение почти идеально :) Мои reply-> ул переменная в виде 1456242904.226683 но (time_t) atof (ул reply->) возвращать только 1456242904 Я не понимаю. Что происходит? Спасибо! –

+0

@Lamujeresponja Это как я пытался объяснить в своем ответе. 'time_t' является интегральным типом данных. Он не может удерживать цифры после десятичной точки. – Rabbid76

+0

Да, извините. Мой английский оставляет желать лучшего. И затем, теперь я нашел решение для получения milisecs преобразования. Большое спасибо за вашу помощь. С уважением, Испания. Elvira –