从字符串中提取日期的世纪

Posted

技术标签:

【中文标题】从字符串中提取日期的世纪【英文标题】:Extract the century of a date from a string 【发布时间】:2020-07-08 21:21:41 【问题描述】:

我的任务是输出给定日期的当前世纪。日期可以表示为string;例如,19.03.2022

如何检索此类字符串的年份和世纪?

【问题讨论】:

您将年份读取为 int,是否减一,这取决于您将 2000 年视为 20 世纪还是 21 世纪。然后除以 100(整数除法)并加 1。 一年中的世纪很容易。从字符串中获取年份很复杂。您需要支持多少种日期格式?简单的(myString.match(/\b\d4\b/) || [])[0] 会支持很多。 解释该代码 sn-p,我使用正则表达式来匹配单词边界 \b 后跟 4 位数字 \d4 后跟单词边界。如果有匹配项,则为 4 位数字。如果没有,|| [] 会给你一个空数组,然后当你第一次进入时会给你undefined @Jeffrey 然后你删除你的评论中的回答并将它放在正确的地方,我们其他人可以对它进行同行评审 @asteroidswithwings 是的。我很懒。我只是想在不付出必要努力的情况下将 OP 指向正确的方向。评论中的回答不好吗? 【参考方案1】:
string date = "19.03.2022";
int century = (date[6] - '0') * 10 + (date[7] - '0');
if(date[8] != '0' || date[9] != '0') century++;
cout<<century<<endl;

输出:21

复杂度:O(1)

【讨论】:

很好地解决了世纪之交的边缘案例。【参考方案2】:

给定string 的年份始终包含在最后四个字符中,因此您可以使用string::substr 然后std::stoi 来检索年份:

string str = "19.03.2022";
int year = stoi(str.substr(6, 4)); // year = "2022"

之后,你可以使用year来计算世纪:

int century = year/100 + 1; // century = 21

【讨论】:

在给出的示例中,年份在最后 4 个字符中。但在 ANSII 格式中,它将是前 4 个字符。 @btilly OP 没有提及“ANSII 格式”。 @AsteroidsWithWings 不,OP 只给出了 1 个日期示例。 OP 没有说这是否是唯一的格式。 @btilly 他们给出了输入和所需的输出。与许多不同的可能格式无关。您正在编造一个不是这个问题的不同问题。 @AsteroidsWithWings 所问的问题是,“我想从给定的字符串中找出哪个世纪。”从作为示例给出的字符串中,“它在 21 世纪”是一个有效的答案。您认为这是对所提问题的一个很好的回答吗?当然不是!为什么不?因为您知道必须处理其他字符串。这里的答案只适用于一种确切的格式,并且没有错误检查。

以上是关于从字符串中提取日期的世纪的主要内容,如果未能解决你的问题,请参考以下文章

从日期时间字符串中提取日期

从字符串转换日期和/或时间并从日期中提取季度/年时转换失败

如何从日期字符串中提取年份?

从 VARCHAR 字符串中提取日期 ORacle

从包含excel中文本字符串的单元格中提取日期

从字符串中提取数字作为R中的数字或日期