如何使用put_time()设置日期格式以删除前面的空格和零

How can I format a date to remove preceding spaces and zeros using put_time()?

本文关键字:前面 删除 空格 格式 日期 put 何使用 time 设置      更新时间:2023-10-16

我的程序解析一个表示日期格式为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, December 4, 2013

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

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

试试这个:

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