Подтвердить что ты не робот

Преобразование строки в дату на С++

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

4b9b3361

Ответ 1

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

Ответ 2

Я понял это, не используя 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 и манипулировать.

Ответ 4

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

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

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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

Но формат должен быть указан как:)