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



目标是使用实际时间提供整数(或长整型(的函数。因此,我将本地时间写入字符串(据我所知(,并尝试将其与 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: %sn", time_str);
    act_time = atol(time_str);
    printf("Transformed time: %dn", act_time);
    return act_time;
}

导致响应:

实际时间:20170407091221 改造时间:1240669205

希望这很容易解决,并提前感谢大家的帮助!

不能使用 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);

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

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

最新更新