将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; }
但格式应该如上所述:)