Преобразовать строку в дату в C ++ - PullRequest
19 голосов
/ 21 ноября 2008

Я знаю, что это может быть просто, но, будучи C ++, я сомневаюсь, что это будет Как мне преобразовать строку в форме 01.01.2008 в дату, чтобы я мог манипулировать ею? Я счастлив разбить нить на день, месяц, год, составляющие. Также рад, если решение только для Windows.

Ответы [ 8 ]

16 голосов
/ 21 ноября 2008
#include <time.h>
char *strptime(const char *buf, const char *format, struct tm *tm);
9 голосов
/ 21 ноября 2008

Я разобрался без использования strptime.

Разбейте дату на составляющие, то есть день, месяц, год, затем:

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 и манипулировать им.

6 голосов
/ 21 ноября 2008

Вы можете попробовать Boost.Date_Time Input / Output .

2 голосов
/ 22 мая 2014

Для всех, кто ищет strptime() для Windows, для работы требуется источник самой функции. Последний код NetBSD, к сожалению, не легко переносится на Windows.

Я сам использовал реализацию здесь (strptime.h и strptime.c).

Еще один полезный фрагмент кода можно найти здесь . Это происходит от Google Codesearch, который больше не существует.

Надеюсь, это сэкономит много времени на поиски, так как мне потребовалось довольно много времени, чтобы найти это (и чаще всего заканчивалось этим вопросом).

1 голос
/ 17 сентября 2015

Почему бы не пойти на более простое решение с использованием boost

using namespace boost::gregorian;
using namespace boost::posix_time;    
ptime pt = time_from_string("20150917");
1 голос
/ 04 ноября 2014
#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;
}
1 голос
/ 13 января 2010

В библиотеке POCO есть класс DateTimeParser, который может вам в этом помочь. http://www.appinf.com/docs/poco/Poco.DateTimeParser.html

0 голосов
/ 23 апреля 2015

Вы можете использовать библиотеку наддува (кроссплатформенную)

#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;
}

Но формат должен быть таким, как упомянуто:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...