You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何将日期格式字符串转换为Unix时间戳?

将日期字符串转换为Unix时间戳的可行实现

你需要把格式如%d/%m/%Y, %H:%M:%S的日期字符串转回Unix时间戳,之前尝试strptime和流提取未成功,下面给出两种可靠实现及踩坑说明:

方法一:使用strptime(兼容C/C++)

strptime本身是可行的,失败多因未正确初始化结构体或格式不匹配,正确写法如下:

#include <iostream>
#include <ctime>
#include <string>

int main() {
    const std::string date_str = "03/02/2022, 14:44:00"; // 对应你之前的时间戳1643873040
    struct tm timeinfo = {0}; // 必须初始化,避免垃圾值干扰转换

    // 按指定格式解析字符串,格式需与输入完全匹配
    if (strptime(date_str.c_str(), "%d/%m/%Y, %H:%M:%S", &timeinfo) == nullptr) {
        std::cerr << "日期字符串解析失败" << std::endl;
        return 1;
    }

    // mktime将本地时区的tm结构体转为Unix时间戳,与你之前localtime的逻辑对应
    time_t timestamp = mktime(&timeinfo);
    if (timestamp == -1) {
        std::cerr << "转换为时间戳失败" << std::endl;
        return 1;
    }

    std::cout << "转换后的时间戳:" << timestamp << std::endl;
    return 0;
}

关键注意事项:

  • 必须初始化tm结构体为0,未赋值的字段(如tm_isdst)会导致mktime计算错误
  • 格式字符串要完全匹配输入的分隔符(逗号、空格都不能少)
  • mktime默认使用本地时区,和你之前用localtime转换的时区逻辑一致

方法二:使用C流与std::get_time(C11及以上)

流提取失败通常是未正确使用std::get_time指定格式,示例代码:

#include <iostream>
#include <ctime>
#include <string>
#include <sstream>
#include <iomanip>

int main() {
    const std::string date_str = "03/02/2022, 14:44:00";
    struct tm timeinfo = {0};
    std::istringstream ss(date_str);

    // 用std::get_time指定解析格式
    ss >> std::get_time(&timeinfo, "%d/%m/%Y, %H:%M:%S");

    if (ss.fail()) {
        std::cerr << "日期字符串解析失败" << std::endl;
        return 1;
    }

    time_t timestamp = mktime(&timeinfo);
    if (timestamp == -1) {
        std::cerr << "转换为时间戳失败" << std::endl;
        return 1;
    }

    std::cout << "转换后的时间戳:" << timestamp << std::endl;
    return 0;
}

关键注意事项:

  • 需包含<iomanip>头文件才能使用std::get_time
  • 流解析的格式字符串必须与输入完全匹配,包括所有非日期字符
  • 同样要初始化tm结构体,避免未定义行为

常见失败原因排查

  • 格式字符串不匹配:比如把dd/mm/yyyy写成%m/%d/%Y,或遗漏逗号、空格
  • tm结构体未初始化:未赋值的字段会导致mktime无法正确计算时间戳
  • 时区冲突:若环境时区与时间戳对应的时区不一致,可考虑用gmtime+timegm(部分平台支持)替代本地时区接口

内容的提问来源于stack exchange,提问作者Федор

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:23:23