Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » mit einem datum rechnen

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
15.12.2004, 09:17 Uhr
enno-tyrant
Frag nicht!


hi,

ich habe ein kleines backup-programm geschrieben, daß mir jeden tag daten von einer festplatte auf eine andere kopiert. er legt jeweils einen ordner an der als 'namen' das *datum_des_kopiertages* erhält (sprich immer das jeweils aktuelle datum).

nun soll aber jeder ordner der älter als fünf tage ist gelöscht werden, also datum-5=löschen (sozusagen).

wie stelle ich das an?

habe schon das forum durchsucht und fand diese links:
www.fun-soft.de/showtopic.php?threadid=7738 (hat mir nicht geholfen)
www.fun-soft.de/showtopic.php?threadid=4462 (auch nichts)
www.fun-soft.de/showtopic.php?threadid=258 (hat noch weniger gebracht)

kann mir bitte jemand einen ansatz geben, am besten ein beispiel.

danke
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.12.2004, 09:05 Uhr
~Balthamos
Gast


Hi,

programmierst du in C oder in C++?
Naja, egal. Hier kommt mal ein kleines C-Programm (sind alles Ansi-C Funktionen):


Code:


#define ANZAHL_ZEICHEN 10
char String[ANZAHL_ZEICHEN+1];
int Anzahl, MaxAnzahl = ANZAHL_ZEICHEN;
time_t AktuelleZeit;

AktuelleZeit = GetActualTime();   // gibt dir die Millisekunden seit dem 1. Jan 1990 zurück
Anzahl = strftime (String, MaxAnzahl+1, "%Y-%m-%d", gmtime(&AktuelleZeit));





Danach hast du mal einen Zeitstempel von heute. Jetzt musst du nur noch diesen Zeitstempel zerlegen (halt bei den '-' trennen) und den Tag -5 nehmen.

Griaßle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.12.2004, 10:05 Uhr
enno-tyrant
Frag nicht!


hi,

sorry ich vergaß:

ich programmiere in c++

hatte mir auch schon solche gedanken gemacht, aber wie sage ich dem rechner das er am 03.12.2004 den 28.11.2004 löschen soll.

3-5=-2, deshalb bin ich gezwungen mit dem datum zu errechen damit ich dies erhalte: 03.12.-5=28.11.

da liegt eben das problem
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.12.2004, 10:12 Uhr
virtual
Sexiest Bit alive
(Operator)


Also ich würde so vorgehen;

das Datum Deiner Datei/Verzeichnisses bestimmst Du ja mit stat oder fstat (das gibt dir eine Struktur zurrück, wo ein Feld namens st_mtime oder so drin ist). Dieser Wert ist die Anzahl der Sekunden seit 1.1.1970. Hierauf kannSt Du nun 5 tage drauf addieren, also 5*24*3600.
Die daraus resultierende Zahl vergleichst Du mt der aktuellen Zeit (also das, was dir zB time zurückliefert). Ist der Wert kleiner, musst Du löschen, sonst eben nicht.

Ich bin UNIX mensch, es mag unter Windows noch alternativen geben.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.12.2004, 12:04 Uhr
enno-tyrant
Frag nicht!


habs geschafft, hier die funktion:


Code:
#include <iostream>
#include <time.h>
#include <sstream>
using namespace std;

int tag, monat, jahr;
string datum;

int main ()
{
  // einbinden der funktionen zur anzeige und berechnung der zeit
  time_t rawtime;
  struct tm * timeinfo;
  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  
  //datum initialisieren
  tag=(timeinfo->tm_mday);
  monat=(timeinfo->tm_mon+1);
  jahr=(timeinfo->tm_year+1900);
  
  //datum in string umwandeln
  ostringstream TAG;
  TAG << tag-5;               //fünf tage abziehen
  ostringstream MONAT;
  MONAT << monat;
  ostringstream JAHR;
  JAHR << jahr;
  
  //datum komplett als string ausgeben
  datum=(TAG.str())+(".")+(MONAT.str())+(".")+(JAHR.str());
  
  //aktuelle zeit ausgeben wochentag monatsname tag
  cout << asctime (timeinfo) << endl;
  
  cout << "Tag           : " << tag << endl;
  cout << "Monat        : " << monat << endl;
  cout << "Jahr           : " << jahr << endl;
  cout << "Datum   -5  : " << datum << endl;
  cin.get();
  
  return 0;
}



danke 'Virtual' dein tip hat mir geholfen
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.12.2004, 12:28 Uhr
virtual
Sexiest Bit alive
(Operator)


Spannend an Deinem Ansatzwird sein, wie sich das Programm am 1 bis 5 eines jeden Monats verhält: einfach vom Tag was abziehen bringt ggf. negative Tage mit sich.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.12.2004, 12:48 Uhr
enno-tyrant
Frag nicht!


tatsächlich, immenoch das selbe problem *grrrmpf*
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: