将string转换为C ++中的date

我知道这可能是简单的,但是我怀疑C ++会是。 如何将01/01/2008格式的string转换为date以便操作? 我很高兴把这个string分解成为一年中每月的成分。 如果解决scheme只是Windows,也很高兴。

#include <time.h> char *strptime(const char *buf, const char *format, struct tm *tm); 

我没有使用strptime

将date分解成其组件,即日,月,年,然后:

 struct tm tm; time_t rawtime; time ( &rawtime ); tm = *localtime ( &rawtime ); tm.tm_year = year - 1900; tm.tm_mon = month - 1; tm.tm_mday = day; mktime(&tm); 

现在可以将tm转换为time_t并进行操作。

您可以尝试Boost.Date_Timeinput/输出 。

对于正在寻找Windows的strptime()来说,它需要函数本身的源码才能工作。 不幸的是,最新的NetBSD代码不能轻松移植到Windows。

我自己已经使用这里的实现(strptime.h和strptime.c)。

另一个有用的代码块可以在这里find。 这来自Google Codesearch,它现在不存在了。

希望这样可以节省大量的search空间,因为我花了很长时间才发现这个问题(最常见的是这个问题)。

POCO库有一个DateTimeParser类,可以帮助你。 http://www.appinf.com/docs/poco/Poco.DateTimeParser.html

 #include <time.h> #include <iostream> #include <sstream> #include <algorithm> using namespace std; int main () { time_t rawtime; struct tm * timeinfo; int year, month ,day; char str[256]; cout << "Inter date: " << endl; cin.getline(str,sizeof(str)); replace( str, str+strlen(str), '/', ' ' ); istringstream( str ) >> day >> month >> year; time ( &rawtime ); timeinfo = localtime ( &rawtime ); timeinfo->tm_year = year - 1900; timeinfo->tm_mon = month - 1; timeinfo->tm_mday = day; mktime ( timeinfo ); strftime ( str, sizeof(str), "%A", timeinfo ); cout << str << endl; system("pause"); return 0; } 

为什么不使用boost来简化解决scheme?

 using namespace boost::gregorian; using namespace boost::posix_time; ptime pt = time_from_string("20150917"); 

你可以利用boost库(跨平台)

 #include <stdio.h> #include "boost/date_time/posix_time/posix_time.hpp" int main() { std::string strTime = "2007-04-11 06:18:29.000"; std::tm tmTime = boost::posix_time::to_tm(boost::posix_time::time_from_string(strTime)); return 0; } 

但格式应该如上所述:)