Frage zu strftime, Kalenderwoche berechnen
-
Hallole.
Ich möchte für einen bestimmten Tag die Kalenderwoche berechnen.
Dazu übergebe ich strftime eine gefüllte struktur von tm:mydate.tm_mday = akt_tag; mydate.tm_mon = akt_mon -1; /* Februar */ mydate.tm_year = akt_jahr - 1900; ..... strftime(wochnr,sizeof(wochnr),"%W",&mybackdate); ....
In "wochnr" sollte nun die KW stehen.
Im alten Jahre stimmt da auch noch.
Aber sobald ich an die Grenze zum 31.12.2007 kommt ist kappes.Der der Formatdesciptor %W gibt ja die Kalenderwoche von 00-53 an.
Aber shcon da verstehe ich das nicht, denn das Jahr hat meiner Ansich nach nur 52 Wochen.
Somit ergibt sich für den 31.12.2007 aus strftimt KW 53, was aber definitiv
KW1 im neuen darstellt.Alle weiteren Berechnungen im neuen Jahr sind dann falsch.
der 1.1.1007 ist dann KW 0.
Ist ja auch klar, weil %W 00-53 ausgibt.
Aber warum ist das so und wie bringe ich den dazu mir die korrekte KW anzuzeigen?Gibts ne boost::/oder sonstige C++ alternative?
-
%W liefert die Woche des Jahres, wobei der Montag der erste Tag der Woche ist, in Jahr 2007 ist der 31. Dezember auch ein Montag, womit das Jahr dann 53 Wochen hat. Sprich für einen Tag hat das alte Jahr 2007 53 Wochen.
-
Mondmann schrieb:
Der der Formatdesciptor %W gibt ja die Kalenderwoche von 00-53 an.
Wenn du die Kalenderwoche nach dem hier üblichen Schema (ISO 8601) berechnen willst, dann nimm %V.
Und ja, in manchen Jahren gibt es eine KW 53.
-
Ja aber %V gibt es nicht.....
Und warum ist der 31.12.2007 KW 53 und nicht KW01???
-
Mondmann schrieb:
Ja aber %V gibt es nicht.....
Klar gibt's das.
Mondmann schrieb:
Und warum ist der 31.12.2007 KW 53 und nicht KW01???
Der 31.12.2007 ist KW 1. Die nächste KW 53 ist 2009.
-
MFK schrieb:
Mondmann schrieb:
Ja aber %V gibt es nicht.....
Klar gibt's das.
Wo nutzt du das? Ist nicht Teil des Standards.
-
ES nützt nichts.
Die Frage ist warum er beim 31.12.2007 KW 53 und nicht KW 1 berechnet?
-
Weil es dann doppeldeutig wäre. Dann würde es ja zwei KW1 im gleichen Jahr geben.
-
Ich möchte das Thema nochmal aufgreifen.
Das mit der KW 53 usw ist klar.Trotzdem habe ich wie im ersten Post die KW mit dem heutigen Datum berechnen und es kommt 07 heraus, obwohl definitiv heute KW08 ist.
Wie kann ich denn nun korrekt die KW berechnen?Mondmann
-
Hi !
...
%W
week number of the year as a decimal number (00-52) where Monday is the first day of the week
...Die erste Kalenderwoche ist also 0, die zweite 1, usw..
Ich kenne keine Funktion der Standardbibliothek, welche die Kalenderwoche als Zahlenwert liefert. Du könntestst nach int konvertieren und 1 dazuaddieren.
Oder dir ne Funktion g00geln.Gruß,
p.
-
Ja also wenn man http://www.a-m-i.de/tips/datetime/datetime.php
anguckt dann wird alles klar.
Es gibt einige Regeln zu beachten wann welche Kalenderwoche anfängt usw.
Mit den Funktionen kann man schon sehr viel anfangen.
Mir wurde dadurch einiges klarer.Hoffe anderen hilfts auch , grüße Mondmann
-
int KW() { char KW[10]; time_t t; struct tm * lt; time(&t); lt = localtime(&t ); strftime( KW, 9, "%W", lt); return atoi( KW )+1; }