Datum formatieren
-
Hallo,
eine Frage: mit diesem Programm werden Datum und Uhrzeit der letzten Änderung ausgegeben. Allerding möchte ich nur das Jahr und den Monat in dieser Reihenfolge erhalten. Bsp.: 2010 08 oder 2010 August
Habe schon viel ausprobiert aber nichts hat bisher funktioniert.
int main (int argc,char** argv) { struct stat s; char buffer [50]; int n; stat("C:\\test.txt", &s); cout<<"Dateiname: "<<"C:\\test.txt"<<endl; cout<<"Datum der letzten Modifikation : " <<ctime(&s.st_mtime); cin.get(); return 0; }
Bitte um Hilfe und vlt ein Beispiel.
Danke.
-
In C++ gibt es dafür die Facette std::time_put<> da kann man sich noch eine nette Hülle (hier struct Zeit) bauen - und dann sieht das etwa so aus:
#include <iostream> #include <string> #include <locale> // Facette std::time_put #include <ctime> // std::tm struct Zeit { Zeit( std::time_t tm, const std::string format ) : m_tm( tm ), m_format( format ) {} friend std::ostream& operator<<( std::ostream& out, const Zeit& t ) { typedef std::ostreambuf_iterator< char > out_type; typedef std::time_put< char, out_type > time_put_facet_type; const time_put_facet_type& fac = std::use_facet< time_put_facet_type >( out.getloc() ); const char* pattern = t.m_format.c_str(); fac.put( out_type( out ), out, out.fill(), std::localtime( &t.m_tm ), pattern, pattern + t.m_format.size() ); return out; } private: std::time_t m_tm; std::string m_format; }; int main() { using namespace std; time_t tt = time(0); cout << Zeit( tt, "%Y %B" ) << endl; // %Y: Jahr; %B Monat return 0; };
Der Formatstring ist der gleiche wie bei strftime.
Falls Du die Monate in deutsch haben möchtest, so musst Du die locale("german") verwenden. wobei der String "german" von Deiner Umgebung abhängt.
Gruß
Werner
-
Danke,
aber wenn ich das richtig sehe, gibt dieses Programm doch die aktuelle zeit, bzw datum wieder, oder? ich wollte das Änderungsdatum einer Datei erhalten.
-
aber wenn ich das richtig sehe, gibt dieses Programm doch die aktuelle zeit, bzw datum wieder, oder?
Ja. Das ist ja auch nur da um dir zu zeigen wie die Zeit formatiert werden kann.
Du musst halt
time_t tt = time(0);
durch
time_t tt = s.st_mtime;
ersetzen.
(natürlich muss stat(..) etc. vorher aufgerufen werden.)
-
Vielen Dank! Hat geholfen...
Aber mein Problem geht weiter. Die Ausgabe, die ich durch
Zeit( tt, "%Y %B" );
erhalte, muss in einem Array speichern, denn ich muss diese Prozedur mit allen Dateien aus einem Verzeichnis durchlaufen, um Ordner zu erstellen, die dann als Namen die Ausgabe von
Zeit( tt, "%Y %B" );
haben.
Darin sollen die Dateien geordnet werden.
-
..muss in einem Array speichern, denn ich muss diese Prozedur mit allen Dateien aus einem Verzeichnis durchlaufen..
Schön... dann tu das.
Anfangen könntest Du mit
std::vector<time_t> zeiten;
Es wird Dir hier (hoffentlich) niemand einfach deine Applikation schreiben genauso wie du sie benötigst... Du sollst das selbst lernen.