为啥 c++ 标准支持函数 strftime 但不支持 strptime?
Posted
技术标签:
【中文标题】为啥 c++ 标准支持函数 strftime 但不支持 strptime?【英文标题】:Why c++ standard support function strftime but not strptime?为什么 c++ 标准支持函数 strftime 但不支持 strptime? 【发布时间】:2014-03-13 15:37:38 【问题描述】:为什么 C++ 标准支持函数 strftime()
而不是 strptime()
? strftime()
可用于将时间更改为字符串,但没有可以将字符串更改回时间的函数。
在 Posix 上,strptime()
可用作类 C 函数,使用它需要注意混合 C 和 C++ 代码的潜在问题。
【问题讨论】:
我几乎为此 +1 了,因为这似乎是一个公平的问题(此功能 不 存在于 C 中,而且它确实奇怪),但后来我重新考虑了,因为我认为这个问题实际上无法回答。 好问题。我认为在 C++ 中序列化时间和日期的函数通常很少且体积庞大。如果期待更多来自 C++11 chrono @LightnessRacesinOrbit 好吧,参与 C++ 标准化过程的人确实经常这样做,所以他们可能有一个(f)实际答案。 我认为主要原因是它不仅取决于语言环境,而且你有很多不同的方法可以在给定的语言环境中写入日期。那将是一个大模块,或者一个不完整的解决方案。 (至少那是我的 2 美分) 这是一个 Posix 函数。标准不会尝试迎合特定的操作系统 API,即使它们看起来像 C 库函数。 【参考方案1】:我不是标准委员会的成员,但这里是:
strptime 由 ISO/IEC 9945 文档(本质上是 Single Unix Specification / POSIX)定义。它不是 9899:1990 或 9899:1999 C 标准文件的一部分(我认为它不是 9899:2011 的一部分,但我不能确定,因为我还没有那个文件)。
由于 C++ 标准仅规定与其 C 表亲的兼容性级别,因此您不会发现 14882:1998 或 14882:2011 C++ 标准文档规定的 strptime。
【讨论】:
看来strptime()
不受C标准支持,C++标准只是继承了它。但是我还是很疑惑为什么C标准不支持strptime()
...然后我发现c++11中添加了函数std::time_get::get()
,和strptime()
做类似的事情,可以与std::time_put::put()
成对使用。感谢您的回答。
现实情况是,如果 strptime 在 C 环境中可用,您应该可以在 C++ 中使用它,只是不能在可移植应用程序中指望它(除非您唯一关心的可移植性是POSIX 兼容平台)。
是的,兼容性可能有问题。无论如何,我已经尝试过了,它在我的 Linux 上运行良好。但必须注意 C 全局语言环境必须与 C++ 全局语言环境相匹配,尤其是当它没有名称时。
只是好奇,为什么“不接受”这个答案?现在以何种方式不是列出的一个答案的最佳答案? :)
对我来说这不是一个完整的答案。主要原因只是strptime()
不是C标准的一部分,嗯,那为什么C标准不支持呢?有没有更适合与strftime()
一起使用的功能?也许从一开始这个问题就没有一个合理的答案...... :)以上是关于为啥 c++ 标准支持函数 strftime 但不支持 strptime?的主要内容,如果未能解决你的问题,请参考以下文章
Dev C++为啥不支持以void main()为主函数的空函数C程序?老师给出的一直都是以Tu
为啥支持 C++11 及更高版本的 C++ 编译器需要 Boost.SmartPtr?
为啥 C++ 标准中没有 std::string_view 类型的参数的 std::basic_string 类的构造函数[重复]