为什么C++标准支持函数strftime但不支持strptime?

13
为什么C++标准库支持strftime()函数,却不支持strptime()函数?strftime()可以将时间转化为字符串,但是没有一个函数能够将字符串转换回时间。
在类Unix系统中,strptime()作为C风格函数可用,使用时需注意混合编写C和C++代码可能带来的问题。

我差点点了+1,因为这似乎是一个公平的问题(在C中不存在这个功能,而且这确实很奇怪),但后来我重新考虑了一下,因为我认为这个问题实际上是无法回答的。 - Lightness Races in Orbit
好问题。我认为在C++中序列化时间和日期的函数通常很少且臃肿。如果需要更多功能,可以考虑使用C++11 chrono库。 - TNA
@LightnessRacesinOrbit 好吧,参与C++标准化过程的人们确实经常访问SO,因此他们可能会有一个(事实)确切的答案。 - Angew is no longer proud of SO
2
我认为主要原因不仅在于它取决于语言环境,而且在于你有很多不同的方法来写一个给定语言环境下的日期。这将会导致一个庞大的模块或者是一个不完整的解决方案。(至少这是我的看法) - Synxis
@Angew:是的,没错(你指的是C标准化过程),但即使他们能够用任何有意义的理由支持它,这种可能性也相当低。 - Lightness Races in Orbit
2
这是一个Posix函数。标准不会试图迎合特定的操作系统API,即使它们看起来像C库函数。 - Hans Passant
1个回答

1

我不是标准委员会的成员,但是以下是相关内容:

strptime是由ISO / IEC 9945文件定义的(本质上是Single Unix规范/ POSIX)。它不是9899:1990或9899:1999 C标准文档的一部分(虽然我没有9899:2011,所以不能确定它是否属于该文档)。

由于C ++标准仅规定与其C表兄弟的兼容性级别,因此您不会在14882:1998或14882:2011 C ++标准文档中找到strptime。


1
似乎 strptime() 不被 C 标准支持,而 C++ 标准只是继承了它。但我仍然困惑为什么 C 标准不支持 strptime() … 然后我发现 c++11 中添加了函数 std::time_get::get(),类似于 strptime(),可以与 std::time_put::put() 配对使用。无论如何,感谢您的回答。 - songyuanyao
事实上,如果在C环境中可用strptime,你应该可以从C++中使用它,但在可移植应用程序中不能保证其可用性(除非您的唯一可移植性问题是到POSIX兼容平台)。 - CasaDeRobison
是的,兼容性可能会成为一个问题。不管怎样,我已经尝试过并且在我的Linux上运行良好。但是必须注意C全局语言环境必须与C++全局语言环境匹配,特别是当它没有名称时。 - songyuanyao
只是好奇,为什么要“取消采纳”这个答案?在哪些方面它现在不是最好的答案之一? :) - CasaDeRobison
好的,也许我会为C语言提出一个新问题,并感谢你对它的回答(猜测?):) - songyuanyao
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接