Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Systemdatum zu std::string

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.07.2007, 19:04 Uhr
~tobi87
Gast


Hi,

wie holt man sich nach reinem ANSI-C++-Standard das aktuelle Systemdatum und wandelt es in einen std::string um?
Ich habe über die Suchfunktion schon einiges gefunden, aber nie ANSI-C++.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.07.2007, 20:12 Uhr
~willy
Gast


<ctime> hat C++ von C geerbt, ist also reines C++ !


C++:
#include <ctime>    // geerbt von C!
#include <string>
#include <iostream>

int main ()
{
using namespace std;

    char buf[9];
    
    _strtime(buf);

    string Zeit(buf);

    cout << Zeit << endl;
}



mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.07.2007, 20:19 Uhr
~willy
Gast


...äh Datum war ja gefragt


C++:
int main ()
{
using namespace std;

    char buf[9];
    
    _strdate(buf);
    
    string Datum(buf);

    cout << Datum << endl;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.07.2007, 21:33 Uhr
~tobi87
Gast


weder _strtime noch _strdate sind <ctime> enthatlen.

Wenn ich dein Beispielprogramm von oben übernehme meint der Compiler:
Fehler: »_strtime« wurde in diesem Gültigkeitsbereich nicht definiert
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.07.2007, 21:50 Uhr
0xdeadbeef
Gott
(Operator)


Weder strdate noch strtime sind im Standard enthalten. Standardkonform wäre zum Beispiel

C++:
#include <ctime>
#include <iostream>
#include <string>

int main() {
  std::time_t time = std::time(0);
  std::string s = std::ctime(&time);

  std::cout << s << std::endl;
}


Wenn dir das Format von ctime nicht gefällt, Benutz

C++:
std::tm tm_time = *std::localtime(&time);


Das gibt dir ein struct tm, das die Datumsinformationen schön aufgespaltet enthält - davon kannstes dir dann zusammensetzen wie du willst:

C++:
              struct tm {
                  int tm_sec;         /* seconds */
                  int tm_min;         /* minutes */
                  int tm_hour;        /* hours */
                  int tm_mday;        /* day of the month */
                  int tm_mon;         /* month */
                  int tm_year;        /* year */
                  int tm_wday;        /* day of the week */
                  int tm_yday;        /* day in the year */
                  int tm_isdst;       /* daylight saving time */
              };


Dann halt z.B.

C++:
#include <sstream>

// ...

std::ostringstream osstr;
osstr << tm_time.tm_year << '-' << tm_time.tm_mon << '-' << tm_time.tm_mday;
std::string datum = osstr.str();



Vielleicht noch anzumerken, std::localtime benutzt einen internen statischen Buffer - deswegen leg ich auch ne Kopie an. Weitere Aufrufe von std::localtime verändern den statischen Buffer, das macht die Funktion nicht threadsicher. In POSIX gibt es zusätzlich noch localtime_r, das einen Zeiger auf ein struct_tm entgegennimmt, in den dann das Datum hineingeschrieben wird, allerdings weiß ich nicht, ob das unter Windows ebenfalls vorhanden ist. Würd mich nicht wundern, wenns da _localtime_r heißt oder so.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 01.07.2007 um 21:56 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: