【问题标题】:How can I parse string which is date?如何解析日期字符串?
【发布时间】:2017-11-29 07:15:17
【问题描述】:

我有一个日期字符串。是否有来自标准库的函数可以以任何数字格式解析它(例如时间戳或儒略日)

例如

 std::string str("01/01/2017");//Local format date
 UINT64 timestamp = function(str);

我不想在函数中传递格式日期。我只想知道以本地格式表示的字符串。

【问题讨论】:

  • “我不想在函数中传递格式日期。” 所以函数应该猜测格式是否为 MM/DD/ YYYY 还是 DD/MM/YYYY?我绝对不会依赖它。
  • _variant_t 做到了

标签: c++


【解决方案1】:

如果您想使用本地日期格式,您可以尝试std::get_time(C++11 起可用)或使用"x" 格式的C 函数strftime

| x |解析语言环境的标准日期表示 |全部 | -- cppreference.com

两者都返回日历时间struct tm,您可以根据需要使用localtimegmtime 将其转换为时间戳。

请注意,您必须先设置应用程序的 C 和 C++ 语言环境,才能使用您的操作系统区域设置,而不是经典的 C 语言环境。请参阅 localestd::locale。最好将两者都设置好,这样它们就可以同步并且不会产生不好的惊喜。

setlocale(LC_ALL, "");
std::locale::global(std::locale(setlocale(LC_ALL, NULL)));

【讨论】:

  • 是的,我不想使用格式。我想像_variant_t 这样使用。但我需要跨平台解决方案
  • locale中有一个time facet,我得看看如何从中获取格式
猜你喜欢
  • 2018-04-18
  • 1970-01-01
  • 2020-07-26
  • 2011-06-08
  • 2011-07-21
  • 2013-08-22
  • 2012-05-05
相关资源
最近更新 更多