Datum in KW umrechnen



  • Die Kalenderwoche auszurechnen ist nicht so einfach möglich, da es für jedes Land eine eigene Definition der "Kalenderwoche" gibt...

    Aus diesem Grunde gibt es GetLocaleInfo mit LOCALE_IFIRSTWEEKOFYEAR und LOCALE_IFIRSTDAYOFWEEK:
    http://blogs.msdn.com/michkap/archive/2005/11/14/492249.aspx
    http://msdn.microsoft.com/library/en-us/intl/nls_34rz.asp
    http://msdn.microsoft.com/library/en-us/intl/nls_8rse.asp

    Siehe auch:
    http://en.wikipedia.org/wiki/ISO_week_date

    ADD: Martin war wieder schneller 😉

    @AndyDD: Was hat Dein Posting mit dem Problem zu tun?



  • @Martin Richter: Stimmt, das ist länderspezifisch. Bin mal von Deutschland ausgegangen, da nichts anderes angegeben wurde.

    Ansonsten gilt (für Deutschland) die Regel: "Der erste Donnerstag im neuen Jahr liegt immer in der KW 1." Weiß nicht, ob Microsoft das anders sieht. Was ich damit sagen will: ich weiß nicht welche Berechnungsmodelle bei CString::Format() bzw. strftime() dahinterstecken.



  • Jochen Kalmbach schrieb:

    @AndyDD: Was hat Dein Posting mit dem Problem zu tun?

    Ich berechne die KW in meinen Programmen damit und hatte da noch nie Fehler. Damit könnte man das zweite Problem (also die Berechnung) lösen. Die Berechnung der KW steht in der Mitte. Da darin der Bezug auf weitere Funktionen gemacht wird hab ich halt alles gepostet. Die Formatierung des Datums muss natürlich noch gemacht werden (erstes Problem).


  • Mod

    Die CRT nimmt den entsprechenden Sonntag als Wochenbegin. Din Normen sind den Amerikanern seit jeher unbekannt. COleDateTime::Format verwendet srtftime!

    Du hast den CRT Code. Kein Problem da hinein zu sehen!



  • Martin Richter schrieb:

    Die CRT nimmt den entsprechenden Sonntag als Wochenbegin. Din Normen sind den Amerikanern seit jeher unbekannt. COleDateTime::Format verwendet srtftime!

    Du hast den CRT Code. Kein Problem da hinein zu sehen!

    Also doch selber berechnen. Ich hatte das ja schon vermutet. Außerdem muss die Woche mit Montag anfangen, da sonst der Donnerstag nicht in der Mitte der Woche liegt. Neben der DIN 1355 kann man auch mal in die ISO/R 2015-1971 reinschauen.


  • Mod

    Mein Algorithmus berücksichtigt alle Fälle des Gregorianischen Kalenders inkl. aller Nationalen Spezialitäten und Kombinationen.



  • Ich habe eine Frage zu Martin Richter's Code!
    Wie übergebe ich dort das Datum?
    Es kommen diverse Fehlermeldungen wenn ich den Code welcher du gepostet hast in mein Projekt einbinde! Brauche ich sonst noch etwas?


  • Mod

    1. Diese Funktion basiert auf COleDateTime.
    2. Diese Funktion ist aus meinem Produktivcode kopiert. Dort werden die Locale Daten in einem Singleton gehalten.
    m_iFirstWeekOfYear wird durch
    GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_IFIRSTWEEKOFYEAR,m_iFirstWeekOfYe­ar);
    m_iFirstDayOfWeek wird durch
    GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_IFIRSTDAYOFWEEK,m_iFirstDayOfWeek­);
    Ermittelt.

    Es ist kein echter CPP-Code (Copy-Paste-Programmer-Code) :xmas1:



  • Ach so... 😉
    Kein Wunder funktioniert dieser nicht 😛 (Gibt es Fehler) 😉
    Werde mal versuchen, das Ding zum Laufen zu bringen!
    Aber wie übergebe ich aber den "DATE date"? Anders gefragt, wie schreibe ich das Datum in einen DATE-Datentyp?

    Vielen Dank für die vielen Antworten!
    Frohe Festtage!


  • Mod

    Lesen.... COleDateTime ist ein guter Wrapper für DATE Datentypen!



  • Hi ich bin bereits ziemlich weit gekommen! Nur noch 27 Fehler im Code 😉
    Habe aber ein kleines Problem mit dieser Zeile:

    CLocale &rMyLocale
    

    Ich habe die Datei: "<locale.h>" eingefügt im Header, leider kennt er CLocale immer noch nicht! Ich benutze Visual Studio 2003, kann mir jemand sagen was ich noch includen muss, damit er die Definition kennt?


Anmelden zum Antworten