gpt4 book ai didi

c++ - 使用 std::get_time 转换 ANSI C 的 asctime() 格式

转载 作者:太空宇宙 更新时间:2023-11-04 16:00:46 26 4
gpt4 key购买 nike

我想将 ANSI C 格式的字符串转换为 std::tm 对象。

例子

Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format

更多信息在这里 here .


我的代码:

#include <string>
#include <ctime>
#include <iomanip>
#include <locale>
bool parseAscTimeDate(std::tm& tm, const std::string& str) {
std::istringstream ss(str);
//ss.imbue(std::locale("en_US.UTF8")); //try timezone?
ss >> std::get_time(&tm, "%a %b %d %H:%M:%S %Y");
return !ss.fail();
}

那么为什么会失败呢?

   /* ANSI C's asctime format */
std::tm tm;
if (parseAscTimeDate(tm, "Sun Nov 6 08:49:37 1994"))
std::cout << "Ok!" << std::endl;
else
std::cout << "Wrong!" << std::endl;

附加信息

  1. 我不能使用 strptime 因为 musl libc 中有一个错误。
  2. 我尝试设置一些时区但是:

It need not set tzname, timezone, and daylight.

来自 here

  1. std::get_time example那也失败了?

最佳答案

看起来 %d 格式需要两位数字表示月份中的第几天,这与 std::get_time 上的描述相反:

d: parses the day of the month as a decimal number (range [01,31]), leading zeroes permitted but not required.

这是 GNU C++ 标准库中报告的错误:set::get_time() requires leading 0s for %H and friends .

关于c++ - 使用 std::get_time 转换 ANSI C 的 asctime() 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44901711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com