Datumsberechnung

shader09

Erfahrenes Mitglied
Hallöchen,
Ich lese aus einem Eingabefeld eine Zahl aus
Code:
  SYSTEMTIME Jahr;
  GetSystemTime(&Jahr);

  CString m_Jahr = Jahr.wYear;
  m_Jahr.Format(_T("%d"), Jahr.wYear);
  
  SetDlgItemText(IDC_EDT_JAHR,m_Jahr);

Durch Drücken eines Button soll diese Zahl dann um 1 erhöht werden.
Und da kommt bei mir ein Fehler, wäre schön wenn mir jemand
helfen könnte.

So sieht der Code von dem Button aus;
Code:
  CString lTag;
  int mTag;

  GetDlgItemText(IDC_EDT_TAG,lTag);
  //Hier müsste dann die Rechenoperation ausgeführt werden
  SetDlgItemText(IDC_EDT_TAG,lTag);
 
//Hier müsste dann die Rechenoperation ausgeführt werden

Code:
mTag = atoi( lTag );
mTag++;
lTag.Format( "%i", mTag );
SetDlgItemText(IDC_EDT_TAG,lTag);
mal sehr ausführlich


grüssle :)
 
Und da kommt bei mir ein Fehler
Hier "CString m_Jahr = Jahr.wYear;" muss die Zuweisung weg.

Für die Datumsberechnung kannst du mit "CTime" arbeiten. Um richtig zu rechnen, benötigst du das komplette Datum. Es reicht also nicht, z.B. nur den Tag im Eingabefeld zu inkrementieren. Hier ein Beispiel zum Erhöhen des aktuellen Datums um einen Tag:
C++:
CTime tm = CTime::GetCurrentTime() + CTimeSpan(1,0,0,0);
CString str;
str.Format(_T("%d"), tm.GetDay());
SetDlgItemText(IDC_EDT_TAG, str);
Bei Monaten und Jahren wird's etwas komplizierter da die Anzahl der Tage pro Monat bzw. Jahr unter Berücksichtigung von Schaltjahren ermittelt werden muss. Diese Tipps könnten dabei ganz hilfreich sein:

Gruß
MCoder
 
@MCoder Das is eher schlecht, ich möchte wirklich nurden
Tag/Monat/Jahr/Stunde/Minute addieren bzw subtrahieren
Bau an nem Dialog wo man das Datum und die Zeit einstellen
kann. (durch Drücken des Buttons + oder -)
Und da ist jedes in einem eigenen Eingabefeld.
Wegen dem Schaltjahr und so, kein Problem das habe ich
schon erfolgreich Programmiert*freu*
Also brauche wirklich nur die Berechnung. Trotzdem Danke

@GillBates Ich werde es morgen mal ausprobieren, aber sieht ja
eigentlich gut aus. Danke
 
Guten Morgen,
hab mich jetzt mal dran gesetzt.
Es kommt immer 1 raus.

Code:
  GetDlgItemText(IDC_EDT_TAG,lTag);
  mTag = atoi("lTag"); //irgendwie Fehlerhaft, Ergebnis ist immmer 0
  mTag++;
  lTag.Format(_T("%i"), mTag);
  SetDlgItemText(IDC_EDT_TAG,lTag)
;

Woran könnte es denn jetzt noch liegen!?
 
lTag ist eine CString Variable. Da haben Anführungzeichen nix zu suchen

Wie ich schon oben geschrieben habe:
Code:
mTag = atoi( lTag );


grüssle :)
 
Hallo,

du musst die Variante nehmen, die mit UNICODE umgehen kann:
C++:
mTag = _ttoi(lTag);
oder
C++:
mTag = _wtoi(lTag);
Gruß
MCoder
 

Neue Beiträge

Zurück