2008-11-21 9 views
17

Ich weiß, dass dies einfach sein kann, aber C++ Ich bezweifle, dass es sein wird. Wie konvertiere ich eine Zeichenfolge in der Form 01.01.2008 in ein Datum, damit ich sie manipulieren kann? Ich bin glücklich, die Schnur in die Bestandteile des Tagesmonatsjahres zu brechen. Auch wenn Lösung nur Windows ist.Konvertiere eine Zeichenfolge in ein Datum in C++

Antwort

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

Sie könnten versuchen Boost.Date_Time Input/Output.

+0

Termine sind nicht einfach, schauen Sie sich nur die USA falsch an. Boost :: Date_Time mag groß aussehen, aber es ist nur ein kleiner erster Schritt. – MSalters

9

Ich fand es heraus ohne strptime zu verwenden.

das Datum Break down in seine Bestandteile d Tag, Monat, Jahr, dann:

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 nun zu einem time_t umgewandelt werden können und manipuliert werden.

2

Für alle, die nach strptime() für Windows suchen, erfordert es die Quelle der Funktion selbst zu arbeiten. Der neueste NetBSD-Code portiert leider nicht einfach auf Windows.

Ich selbst habe die Implementierung here (strptime.h und strptime.c) verwendet.

Ein weiteres hilfreiches Stück Code kann here gefunden werden. Dies stammt ursprünglich von Google Codesearch, das nicht mehr existiert.

Ich hoffe, dies spart eine Menge Suche, da es eine Weile gedauert hat, bis ich das gefunden habe (und meistens bei dieser Frage gelandet bin).

1
#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; 
} 
+0

Funktioniert gut. Mit nur ein wenig Modifikation sollte dies die beste Antwort sein – Everyone

0

Sie können die Boost-Bibliothek (Cross-Plattform)

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

nutzen Aber das Format sollte erwähnt sein :)

1

Warum für eine einfachere Lösung gehen nicht boost

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