[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Nur mal so als Denkansatz: So ein Datumsmove ist ja eine ziemlich allgemeingültige Aufgabe. Für so etwas schreiben wir uns immer Serviceprogramme als Tools. Du könntest z.B. ein Tool schreiben, das folgendermaßen aufgerufen würde: setYearInDate(sdatum:%subdt(tdatum:*Y)). Das Tool würde ein Datum zurückliefern. Damit hättest du das ganze ein für alle Mal gelöst und könntest es immer wiederverwenden.

    Dieter

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    So sollte es auch gehen:

    Code:
    DatumS = DatumS + %Years(%SubDt(DatumT: *Y) - %SubDt(DatumS: *Y));
    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

  3. #3
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    Aber jetzt mal ehrlich...

    Warum nicht: TDATUM = %years(%subdt(TDATUM:*Y));

    Uebrigens: Birgitta, well done. Aber Baldurs Lösung geht auch. ;-)
    kf

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Meine Lösung war auch Schnellschuss da ich mir mal eine VBA-ähnliche Funktion "dateserial(Years, Months, Days)" gebaut hatte, die nach obigem Verfahren arbeitet, also mehr Allgemeingültigkeit hat.
    Wie immer gibt's natürlich mathematische Kürzungsverfahren die dann für spezielle Aufgaben schneller sind. Mit obiger Formel addiert man mal schnell x Monate und bekommt auch schnell den Letzten eines bestimmten Monats heraus (%days(x), wobei x = -1 sein kann).
    Ich bin halt Generalist.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Zitat Zitat von camouflage Beitrag anzeigen
    Aber jetzt mal ehrlich...
    Warum nicht: TDATUM = %years(%subdt(TDATUM:*Y));
    Überträgst du bei deiner Lösung nicht nur das Jahr in TDATUM? Geht das wirklich? So wie ich es verstanden habe, soll TDATUM doch ein komplettes Datumsfeld beinhalten und nicht nur ein Jahr.

    Dieter

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    %YEARS converts a number into a duration that can be added to a date or
    timestamp value.
    %YEARS can only be the right-hand value in an addition or subtraction operation.
    The left-hand value must be a date or timestamp. The result is a date or timestamp
    value with the appropriate number of years added or subtracted. For a date, the
    resulting value is in *ISO Format.

    Hier hast du die Erklärung.
    Du kannst noch minimal abkürzen:
    DatumS += %Years(%SubDt(DatumT: *Y) - %SubDt(DatumS: *Y));
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Zitat Zitat von Fuerchau Beitrag anzeigen
    %YEARS converts a number into a duration that can be added to a date or
    timestamp value.
    %YEARS can only be the right-hand value in an addition or subtraction operation.
    The left-hand value must be a date or timestamp. The result is a date or timestamp
    value with the appropriate number of years added or subtracted. For a date, the
    resulting value is in *ISO Format.

    Hier hast du die Erklärung.
    Du kannst noch minimal abkürzen:
    DatumS += %Years(%SubDt(DatumT: *Y) - %SubDt(DatumS: *Y));
    Genau. Das ist aber ziemlich genau Birgittas Lösung. So einfach, wie camouflage sich das gemacht hat, geht es meiner Meinung nach nicht. Wenn es doch geht, bitte posten. Ich lerne gerne dazu.

    Dieter

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Wie ist das mit dem letzten Tag im Februar bei Schaltjahren?

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Wenn man vom 1.3.nnnn einen Tag abzieht erhält man den 28/29.2.nnnn.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Pikachu Beitrag anzeigen
    Wie ist das mit dem letzten Tag im Februar bei Schaltjahren?
    Die Regel ist die, es wird immer versucht den gleichen Tag zu verwenden. Sollte dieser Tag in dem "neuen" Datum nicht vorhanden sein, wird immer der Monatsletzte genommen.

    Wenn also das Ausgangsdatum der 28.02. ist, ist das Ziel-Datum wieder ein 28.02. unabhängig davon, ob das Ausgangsdatum ein Monatsende war oder nicht.
    Wenn das Ausgangsdatum der 29.02. ist und dieser in dem Ziel-Jahr nicht existiert, ist das Ziel-Datum der 28.02.

    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
    Feb 2001
    Beiträge
    20.695
    Die Begründung für dieses Verhalten liegt einfach daran, dass ein Datum in Anzahl Tage seit x umgerechnet und dann wieder in ein Datum konvertiert wird.
    Es gibt dann nur Überlaufprobleme wenn weniger als der 1.1.0001 und mehr als der 31.12.9999 rauskommt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    Also, die Methoden von Baldur und Birgitta funktionieren. Ich seh ja ein, dass so trivial das Ganze nicht ist, da u.U. ein ungültiges Datum raus kommen könnte. Stichwort 29.2.2015!!!. Insofern ist das Rechnen vom Datum schlüssig.

    Allerdings, und das hat der Test auch ergeben, wenn schon ein Datum (z.B. Char to Date) konvertiert wird: IMMER unter MONITOR! Weil, hier geht das mit dem 29.2.2015 und den RNQ0112 haste dann auch gleich um die Ohren.

    So, und nun hab ich genug vom Thema, nochmals Danke an die Postings. :-)
    kf

Similar Threads

  1. Datum die xte + 1 SQL V5R4
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 25-07-14, 15:45
  2. OPNQRYF im RPG-Programm durch SQL ersetzen
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 18-05-14, 16:26
  3. Duplikate mit Sql ersetzen
    By tarkusch in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 09-11-13, 14:08
  4. Suchen/Ersetzen?
    By Matthias.Hayn in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 15-07-02, 07:03
  5. Datum + 10 Tage in RPG
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 06-08-01, 14:47

Berechtigungen

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