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

如何解析由CRT库wcsftime函数%x格式生成的日期字符串

方案1:直接用配对的时间解析函数

MSVC 提供了和 wcsftime 配对的 wcsptime 函数,支持完全相同的格式化符规则,不需要单独获取格式串,直接传入 %x 作为格式参数即可自动适配当前CRT区域设置解析日期:

#include <ctime>
#include <cwchar>

// 解析%x格式的宽字符日期串
bool parse_crt_short_date(const wchar_t* date_str, struct tm* out_tm) {
    memset(out_tm, 0, sizeof(struct tm));
    const wchar_t* parse_end = wcsptime(date_str, L"%x", out_tm);
    // 确保整个串都被成功解析
    return parse_end != nullptr && *parse_end == L'\0';
}

方案2:获取当前CRT区域对应的显式日期格式串

如果你需要拿到类似 dd-MM-yyyy 的格式串做自定义处理,可以用CRT自带的 _getlocaleinfo 接口,这个接口返回的信息完全对应CRT的区域设置,和Windows系统API的GetLocaleInfo相互独立:

#include <clocale>
#include <cwchar>

wchar_t crt_short_date_format[256] = {0};
// 获取当前CRT区域的短日期格式(即%x对应的格式)
int ret = _getlocaleinfo(LC_ALL, LOCALE_SSHORTDATE, crt_short_date_format, _countof(crt_short_date_format));
if (ret > 0) {
    // 拿到的格式串可用于自定义解析、日志输出等场景
}

注意事项

  • 生成文件名和解析文件名的流程必须使用相同的CRT区域设置,否则会出现解析不匹配的问题。
  • 多线程场景下建议用 _create_locale 显式创建固定的区域对象,调用 wcsftime_l、wcsptime_l 这类带区域参数的函数,避免其他线程修改全局区域设置导致异常。
  • 如果你使用的MSVC版本过旧不支持wcsptime,可以用方案2拿到格式串后自己实现简单的拆分解析逻辑,或者接入第三方时间库传入格式串完成解析。

内容的提问来源于stack exchange,提问作者Serge Roussak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:15:05