Mit Datum rechnen
-
Hallo ,
ich möchte mit dem Datum rechnen. z.B. heute ist der 31.06.2006
ich möchte wissen was gestern war.Wie kann ich das machen ? Ich möchte auf keinen Fall abfragen müssen,
wenn heute der 31... ist dann beginne mi 1 usw
Danke.
Viele Grüße,
Elke
-
MSDN schrieb:
SYSTEMTIME
The SYSTEMTIME structure represents a date and time using individual members for the month, day, year, weekday, hour, minute, second, and millisecond.typedef struct _SYSTEMTIME { // st
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;Members
wYear
Specifies the current year.
wMonth
Specifies the current month; January = 1, February = 2, and so on.
wDayOfWeek
Specifies the current day of the week; Sunday = 0, Monday = 1, and so on.
wDay
Specifies the current day of the month.
wHour
Specifies the current hour.
wMinute
Specifies the current minute.
wSecond
Specifies the current second.
wMilliseconds
Specifies the current millisecond.
Remarks
It is not recommended that you add and subtract values from the SYSTEMTIME structure to obtain relative times. Instead, you shouldConvert the SYSTEMTIME structure to a FILETIME structure.
Copy the resulting FILETIME structure to a LARGE_INTEGER structure.
Use normal 64-bit arithmetic on the LARGE_INTEGER value.
QuickInfo
Windows NT: Requires version 3.1 or later.
Windows: Requires Windows 95 or later.
Windows CE: Requires version 1.0 or later.
Header: Declared in winbase.h.See Also
Time Overview, Time Structures, FILETIME, GetSystemTime, LARGE_INTEGER, SetSystemTimeSowas ?

Deine Frage ist ziemlich ungenau

-
Hallo CodeFinder,
wieso ist denn meine Frage ungenau?
Ich habe heute den 27.06.2006 und möchte wissen , was gestern war.

Mfg ,
Elke
-
Elke100 schrieb:
Hallo CodeFinder,
wieso ist denn meine Frage ungenau?
Ich habe heute den 27.06.2006 und möchte wissen , was gestern war.

Mfg ,
Elkeder 26.06.2006

-
Warum fragst du zweimal?
-
Deine Frage is wirsch...

Also du kannst doch das '1. Datum' in die SYSTEMSTRUKTUR schreiben...und dann damit rechnen...
Meinetwegen auch:
SYSTEMTIME sysTime; // Init // ... sysTime.wDay -= 1;Dann haste 'gestern' :p
-
Hmmm, und was machen, wenn sysTime.wDay == 1 ist? Ich hab da zu Hause so ne Datumsklasse. Kann ich hier mal posten, wenn du magst. Ich muss nur dran denken...

-
WebFritzi schrieb:
Hmmm, und was machen, wenn sysTime.wDay == 1 ist? Ich hab da zu Hause so ne Datumsklasse. Kann ich hier mal posten, wenn du magst. Ich muss nur dran denken...

jajaja, das war ja auch nur ein abstraktes Beispiel...find die Fragestellung nach wie vor etwas 'seltsam'...
Aber:

Poste die mal sowas kann ich nämlich janz guht gebrauchen...würde dir das was ausmachen ?
-
Mit COleDateTime/COledateTimeSpan lässt sich sehr einfach rechnen. Diese Klasse sind Bestandteil der ATL und basieren auf dem Win32 API typ DATE (double).
-
class date { friend ostream& operator<<( ostream &os, date &d ); friend istream& operator<<( istream &is, date &d ); private: bool valid; char seperator; unsigned short day; unsigned short month; unsigned short year; static bool is_leap_year( unsigned short y ); public: date( ); date( const date &d ); date( unsigned short d, unsigned short m, unsigned short y ); date( string str ); bool is_valid( ) const; date& operator=( const date &d ); }; ostream& operator<<( ostream &os, date &d ) { if( !d.valid ) return os << "date not valid!"; os.width( 2 ); os.fill( '0' ); os << d.day << d.seperator; os.width( 2 ); os.fill( '0' ); os << d.month << d.seperator; os.width( 4 ); os.fill( '0' ); os << d.year; return os; } istream& operator>>( istream &is, date &d ) { unsigned short day; unsigned short month; unsigned short year; cout << "Day: "; is >> day; cout << "Month: "; is >> month; cout << "Year: "; is >> year; d = date( day, month, year ); return is; } bool date::is_leap_year( unsigned short y ) { if( ( y % 100 ) == 0 ) { if( ( y % 400 ) == 0 ) return true; return false; } if( ( y % 4 ) == 0 ) return true; return false; } date::date( ) : valid( false ), seperator( '.' ), day( 0 ), month( 0 ), year( 0 ) { } date::date( const date &d ) { day = d.day; month = d.month; year = d.year; valid = d.valid; seperator = d.seperator; } date::date( unsigned short d, unsigned short m, unsigned short y ) : valid( false ), seperator( '.' ) { if( m < 1 || m > 12 || y < 1582 || !d ) return; unsigned short days[ 12 ] = { 31, 00, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; days[ 1 ] = is_leap_year( y ) ? 29 : 28; if( d > days[ m - 1 ] ) return; day = d; month = m; year = y; valid = true; } bool date::is_valid( ) const { return valid; } date& date::operator=( const date &d ) { day = d.day; month = d.month; year = d.year; valid = d.valid; seperator = d.seperator; return *this; }viel Spaß beim Erweitern

Greetz, Swordfish
-
Hallo Greetz Swordfish,
so etwas möchte ich gerade vermeiden .
Es gibt eine andere Möglichkeit : Das Datum in long umwandeln , damit rechnen und dann wieder zurück .
ich habe noch nicht herausgefunden wie das geht...Trotzdem , danke für deine Mühe.
Mfg , Elke
-
Hallo Codefinder,
Deine Frage is wirsch...
Also du kannst doch das '1. Datum' in die SYSTEMSTRUKTUR schreiben...und dann damit rechnen...
Meinetwegen auch:
C/C++ Code:
SYSTEMTIME sysTime;
// Init
// ...sysTime.wDay -= 1;
Wenn ich es so gemacht hätte , dann wäre ich morgen arbeitslos .*g*
Was mache ich denn , wenn das Jahr oder Monat sich ändern ? oder heute der 1 .
ist ?Und wenn du die Frage nicht verstehst , versuche bitte nicht den Fragesteller
als Blödmann abzustempeln.Mfg ,
Elke
-
lol, na ok...wie du meinst...aber ich finde Swordfishs Klasse verdammt gut(für deinen Zweck
)Elke100 schrieb:
so etwas möchte ich gerade vermeiden .
Es gibt eine andere Möglichkeit : Das Datum in long umwandeln , damit rechnen und dann wieder zurück .Na es geht doch: Du willst also nur ein Datum von einem String(std::string/C-String ? ) in eine long Variable umwandeln ?
-
Elke100 schrieb:
Es gibt eine andere Möglichkeit : Das Datum in long umwandeln , damit rechnen und dann wieder zurück.
ich habe noch nicht herausgefunden wie das geht...Mit in long umwandeln und damit rechnen wird nicht funktionieren. Schade das du ein ungläubiger bist.

Greetz Swordfish
-
Ich hab's doch nicht mehr. Sorry.

@Elke: Was findste denn an Swordfishs Klasse nicht gut?
-
[opinion] Elke ist einfach zu faul um sie zu erweitern [/opinion]
Greetz, Swordfish
-
Jetzt hackts halt nicht so auf der Elke rum.
MfG,
*Ranner*
-
Ich hack nicht auf Elke100 'rum, sondern spreche nur das offensichtliche aus.
Greetz, Swordfish
-
Hallo Greetz, Swordfish ,
bitte nicht gleich beleidigt sein.

Ich finde deine Lösung nicht schlecht , aber es gibt eine einfachere
Lösung. Wenn ich sie habe , dann stelle ich sie hier unbedingt rein.Danke !
Viele Grüße,
Elke
-
@Elke100:
Elke100 schrieb:
bitte nicht gleich beleidigt sein.

Ich bin sicher nicht beleidigt, weil du dir nicht helfen lässt.
Elke100 schrieb:
Ich finde deine Lösung nicht schlecht , aber es gibt eine einfachere
Lösung.Um mit einem Datum zu rechnen musst du die Anzahl der Monatstage und damit auch Schaltjahre berücksichtigen. Da führt kein Weg daran vorbei. Es kann natürlich sein, dass du eine fertige OpenSource Klasse findest - ich finde jedoch, für so ein einfach zu lösendes Problem ist die Suche nach einer fertigen Klasse aufwändiger, da du sie gegebenenfalls noch für dich anpassen musst.
Also: Good Luck...
Greetz, Swordfish
-
Ich weiß zwar nicht ob es das ist was du suchst, aber das wäre eine Möglichkeit mit dem Datum zu rechnen.
UINT64 one_day = 24 * 60 * 60 * 10000000; SYSTEMTIME st; GetLocalTime(&st); // heutiges datum holen FILETIME ft; SystemTimeToFileTime(&st,&ft); // umwandeln in FILETIME UINT64 * tmptime = reinterpret_cast<UINT64*>(&ft); *tmptime -= one_day; // Einen Tag abziehen FileTimeToSystemTime(&ft,&st); // Wieder in SYSTEMTIME konvertieren // Jetzt kannst du einfach das SYSTEMTIME Objekt st abfragen std::cout << "Gestern war der " << st.wDay << "." << st.wMonth << "." << st.wYear << std::endl;BR