title image


Smiley Re: Zeitarbeit
Hi



Hmja, das mit den Zeiten ist ein bißchen fummelig.



time(0) liefert die aktuelle Zeit als 'time_t'. Man verwendet es also etwa so:

time_t Zeitstempel = time(0);



Ein 'time_t' ist meistens dasselbe wie ein 'long', d.h. du könntest auch schreiben

long Zeitstempel = time(0);



Dieser Wert beschreibt dann die Anzahl der Sekunden seit dem 1. Januar 1970.



Die übrigen Funktionen sind nur "Hilfsfunktionen", weil so eine Zahl wie '1113846689' ziemlich unhandlich ist (man sieht eben nicht auf den ersten Blick, welche Zeit dahinter steckt)



struct tm *nun;

nun = localtime(&Zeitstempel_datei); // diese Zeile erschließt sich mir nicht ganz



Damit (d.h. mit der Funktion 'localtime') wird berechnet, für welches Jahr/Monat/Tag..usw. diese Zahl 1113846689 stath, und die Zeit in eine Struktur vom Typ 'tm' gespeichert:



/*

* A structure for storing all kinds of useful information about the

* current (or another) time.

*/

struct tm

{

int tm_sec; /* Seconds: 0-59 (K&R says 0-61?) */

int tm_min; /* Minutes: 0-59 */

int tm_hour; /* Hours since midnight: 0-23 */

int tm_mday; /* Day of the month: 1-31 */

int tm_mon; /* Months *since* january: 0-11 */

int tm_year; /* Years since 1900 */

int tm_wday; /* Days since Sunday (0-6) */

int tm_yday; /* Days since Jan. 1: 0-365 */

int tm_isdst; /* +1 Daylight Savings Time, 0 No DST,

* -1 don't know */

};





Du kannst also dann mit

cout << nun->tm_year;

ausgeben, welchem Jahr diese Zahl 1113846689 enspricht... Einfach nur, damit man auf die einzelenen Größen leichter zugreifen kann.



Die funktion 'asctime' verwandelt nun so eine Struktur in einen schönen String, wie "Mon Apr 18 20:01:08 2005", den man leicht ausgeben kann.



Dieser Zahlenwert '1113846689', den man mit time(0) erhält, ist für Menschen (und für die meisten Zwecke) ziemlich unprakstisch. Aber für eine Sache ist er toll: Man kann damit ein Datum mit nur EINER Zahl angeben! Diese Zahl kann man extrem einfach in eine Datei schreiben, und auch wieder auslesen.



Um nun auszurechnen, wieviele Sekunden zwischen diesen beiden Zeitpunkten vergangen sind, könntest(!) du schreiben:



long aktuelleZeit = time(0);

long dateiZeit;

eingabe >> dateiZeit;

cout << "Differenz in Sekunden: " << (aktuelleZeit-dateiZeit) << endl;



Allerdings sollte man sicherheitshalber time_t statt long verwenden, und darum auch für die Berechnung der Zeitdifferenz die Funktion 'difftime'.



Hier nochmal als kommentierter Code:



#include <iostream>

#include <fstream>

#include <ctime>

#include <conio.h>



using namespace std;



int main() {



std::ofstream ausgabe("zeitarbeit.txt");



char *name = "Name";

time_t Zeitstempel;



// Hole dir die aktuelle Zeit

Zeitstempel = time(0);



// Speichere die aktuelle Zeit in der Datei

ausgabe << name << "\t" << Zeitstempel << endl;

ausgabe.close();



cout << "Warte nen Moment und drueck ne Taste..." << endl;

getch();



// Hole dir die (neue) aktuelle Zeit

Zeitstempel = time(0);



// Lese die Zeit aus der Datei

time_t Zeitstempel_datei;

std::ifstream eingabe("zeitarbeit.txt");

string nameString;

eingabe >> nameString >> Zeitstempel_datei;



// Gib beide Zeiten und die Differenz 'schön' aus

cout << "Aktuell : " << asctime(localtime(&Zeitstempel)) << endl;

cout << "in Datei: " << asctime(localtime(&Zeitstempel_datei)) << endl;



cout << "Differenz in Sekunden: "

<< difftime(Zeitstempel, Zeitstempel_datei) << endl;



system("PAUSE");

return 0;

}











bye



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: