gpt4 book ai didi

c++ - 如何使用 put_time() 格式化日期以删除前面的空格和零?

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:25 27 4
gpt4 key购买 nike

我的程序解析一个表示日期格式为 YYYYMMDD 的字符串,并以 dayOfWeek、Month Day、Year 的形式打印它。例如,给定字符串 20131224,程序应打印 Sunday, December 24, 2013

我编写的程序就是这样做的:

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

using namespace std;

int main() {
struct tm tm;
string s("20131224");
if (strptime(s.c_str(), "%Y%m%e", &tm)) {
cout << put_time(&tm, "%A, %B %e, %Y") << endl;
}
}

我的问题是,当给定一个带有前面零的日期的字符串时,例如 20131204,输出会在月份和日期之间包含一个额外的空格,例如:Sunday, 2013 年 12 月 4 日

我知道如果我使用 %d 而不是 %e 那么该空格将被替换为零,但这也不是我想要的。我知道删除 %B%e 之间的空格将解决个位数日期的解决方案,但它不适用于双位数日期(因为它将打印2013 年 12 月 24 日,星期日)。我知道我可以使用某种正则表达式搜索来查找和替换那个双空格,但肯定有更直接的解决方案。

如何从使用 put_time() 格式化的日期中删除前面的空格和零?

最佳答案

试试这个:

cout << put_time(&tm, tm.tm_mday < 10 ? 
"%A, %B%e, %Y" :
"%A, %B %e, %Y" ) << endl;

关于c++ - 如何使用 put_time() 格式化日期以删除前面的空格和零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41482346/

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