将字符串从strftime转换为int / long

时间:2017-04-07 07:32:39

标签: c

目标是一个函数,它提供实际时间的int(或long)。 我因此将localtime写入一个字符串(据我所知)并尝试将其与atoi / atol一起转换为我的int / long。但不知怎的,我没有得到预期的结果。

我尝试的事情:

  • 我从初始int切换到long。
  • 我改变了字符串的大小。如果我将其调整为7而不是我需要的15个字节,它至少会转换我的字符串的日期部分。但我需要一切。

我已获得以下代码:

long generate_time()
{    
    time_t time1;
    time(&time1);

    char time_str[15];
    long act_time;

    strftime(time_str, 15, "%Y%m%d%H%M%S", localtime(&time1));
    printf("Actual time: %s\n", time_str);

    act_time = atol(time_str);
    printf("Transformed time: %d\n", act_time);

    return act_time;
}

导致回复:

  

实际时间:20170407091221   转型时间:1240669205

我希望这很容易理清,并提前感谢大家的帮助!

2 个答案:

答案 0 :(得分:3)

您不能使用long来存储此类数据:signed long的最大值为:

-2^31+1 to +2^31-1

-2,147,483,648 to 2,147,483,647

您可以使用unit64_t来做您需要的事情

#include <stdint.h>

[...]

uint64_t act_time = strtoll(time_str, NULL, 10);

答案 1 :(得分:1)

atol将字符串转换为long,在您的情况下可能是32位,因此不能保存值20170407091221。您的值124066920520170407091221的低32位。

您可以在Windows上使用例如calc.exe轻松检查:
20170407091221为十六进制:1258 49F3 1C15
1240669205为十六进制:49F3 1C15