[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2004
    Beiträge
    47

    Im CL den Montag einer KW ermitteln

    Hallo zusammen,
    ich versuche im CL vergeblich das Datum für den Montag einer Kalenderwoche zu ermitteln.
    Beispiel: KW= 4 , JJ=12
    Ermitteltes Datum: 23.01.2012
    Wie das Datum aufbereitet ist, ist natürlich zweitrangig.

    Hat das schon einer gemacht und kann mir weiterhelfen?
    Eine Lösung in RPG würde mir allerdings auch weiterhelfen.

    Danke für eure Hilfe.
    Gruß, cono2000
    http://www.cono2000.de

  2. #2
    Registriert seit
    Jan 2003
    Beiträge
    759
    Hier ein Link zu einer Vorlage für ein Service Programm:

    How to Determine the Week of the Year for a Given Date

    Gruß,
    Robert

  3. #3
    Registriert seit
    Dec 2000
    Beiträge
    285

    Montag ermitteln

    Hallo,
    in RPGSQL habe ich eine Teillösung
    NRTAG Montag = 1, Dienstag 2; ... Sonntag 7


    /free
    exec SQL
    set : NRTAG = DayOfWeek_ISO(: Date);
    /end-free
    Damit hast du den Tag eines Datums und brauchst nur über die datumsfunktion rechnen + oder minus x Tage
    Beispiel:
    eval date2 = date + %days(1)

    Ich hoffe das hilft

    Klaus

  4. #4
    Registriert seit
    Nov 2006
    Beiträge
    102
    Hier ein Link zur Verwendung der Datums-APIs in CLLE:
    Sample LE/date functions from CLPLE

    Vorgehensweise für Dein Problem:

    1. Wochentag des 1. Januar für das gesuchte Jahr ermitteln
    2. Datum des ersten Montags im Jahr ermitteln
    3. 7er-Einmaleins

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Spateneder Beitrag anzeigen
    Hier ein Link zur Verwendung der Datums-APIs in CLLE:
    Sample LE/date functions from CLPLE

    Vorgehensweise für Dein Problem:

    1. Wochentag des 1. Januar für das gesuchte Jahr ermitteln
    2. Datum des ersten Montags im Jahr ermitteln
    3. 7er-Einmaleins
    Man sollte dabei allerdings berücksichtigen, dass der erste Montag im Jahr nicht zwangläufig in der KW 1 liegen muss!
    Die ISO Regeln lauten:
    Die Woche beginnt mit einem Montag und die Mehrheit der Tage in der 1. Kalenderwoche muss aus dem neuen Jahr sein.
    Was man sicher sagen kann ist, dass der erste Donnerstag im Jahr oder der 4. Januar immer in KW1 ist.

    Ich hab das Ganze mal als SQL Funktion gemacht. Das könnte man in embedded SQL hinterlegen und dann aus CL aufrufen:

    Code:
    Create Function MySchema/Tag1KW
          (ParYear    Decimal(4, 0),
           ParWeekIso Decimal(2, 0))
       Returns Date
       Language SQL
    Begin
       Declare Jan4 Date;
       Set Jan4 = Date(Digits(ParYear) concat '-01-04');
       If    ParWeekISO <= 0
          or ParWeekISO > Week_ISO(Jan4 + 1 Year - 7 Days) 
          Then Return Date('0001-01-01');
       End If;
       Return Jan4 + (((ParWeekIso - 1) * 7 + 1) - DayOfWeek_ISO(Jan4)) Days;
    End;
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Oct 2003
    Beiträge
    117
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Man sollte dabei allerdings berücksichtigen, dass der erste Montag im Jahr nicht zwangläufig in der KW 1 liegen muss!
    Die ISO Regeln lauten:
    Die Woche beginnt mit einem Montag und die Mehrheit der Tage in der 1. Kalenderwoche muss aus dem neuen Jahr sein.
    Was man sicher sagen kann ist, dass der erste Donnerstag im Jahr oder der 4. Januar immer in KW1 ist.

    Ich hab das Ganze mal als SQL Funktion gemacht. Das könnte man in embedded SQL hinterlegen und dann aus CL aufrufen:

    Code:
    Create Function MySchema/Tag1KW
          (ParYear    Decimal(4, 0),
           ParWeekIso Decimal(2, 0))
       Returns Date)
       Language SQL
    Begin
       Declare Jan4 Date;
       Set Jan4 = Date(Digits(ParYear) concat '-01-04');
       If    ParWeekISO <= 0
          or ParWeekISO > Week_ISO(Jan4 + 1 Year - 7 Days) 
          Then Return Date('0001-01-01');
       End If;
       Return Jan4 + (((ParWeekISO - 1) * 7 + 1 - DayOfWeek_ISO(Jan4)) Days;
    End;
    Birgitta
    Auf der Suche nach einer SQL-Lösung zum gleichen Problem bin ich auf Deine Funktion gestoßen. Funktioniert prima (eine Klammer auf ist zu viel, aber kein Problem).

    Vielen Dank, Birgitta!

  7. #7
    Registriert seit
    May 2002
    Beiträge
    1.121
    Hallo auch,

    würde diese Funktion gern mal aus probieren, aber Klammertechnisch passt da was nicht. Kann da mir jemand weiter helfen ?

    Danke
    Ronald

  8. #8
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Die Klammer nach "Returns Date)" gehört auf dem ersten Blick auf jeden Fall weg.

    lg Andreas

  9. #9
    Registriert seit
    Aug 2003
    Beiträge
    1.508

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Ich habe den Source Code gerade nochmal ausprobiert und das Beispiel oben durch den geänderten Source Code ersetzt.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  11. #11
    Registriert seit
    May 2002
    Beiträge
    1.121
    Danke,
    habe es es jetzt ausprobiert. Geht prima

Similar Threads

  1. OVRDBF Informationen im CL ermitteln
    By harkne in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 24-09-10, 09:07
  2. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  3. Übergabeparameter im CL Script
    By bo1 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 23-06-06, 15:00
  4. Spoolfile Attribute im CL ermitteln
    By asb_salem in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 21-03-06, 13:32
  5. Satzlänge in CL ermitteln
    By kschmidt in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 19-06-01, 17:35

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •