-
Nunja, wenn du das Datumfeld redefinierst (Overlay) kannst du das tun.
Ansonsten ist das eine Einheit und kann nicht partiell ersetzt werden.
Du musst also das Datum aus den Teilen zusammensetzen und per %date() wieder umwandeln.
Z.B.:
tdatum = %date('0001-01-01') + %years(%subdt(sdatum:*y)-1) + %months(%subdt(tdatum:*m)-1) + %days(%subdt(tdatum:*d-1));
Es gibt da bestimmt noch andere Methoden, wie immer halt.
-
Danke Baldur,
ich hab's befürchtet. So das Gelbe vom Ei ist's ja nun auch wieder nicht. Wartungsfreundlich sieht anders aus. Da behelf ich mir doch mit einem Hilfsfeld. Wäre halt schon schön gewesen, man hätte mit einem SUBDT direkt auf ein anderes Datum moven können.
Methode: Wandle das Datum in ein Char Feld, übertrage das Jahr und wieder zurück in das ISO Datum.
Immerhin bin ich bzgl. meiner "Altersdemenz" wieder ein bisschen beruhigter. :-)
Trotzdem, Danke.
kf
-
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
-
So sollte es auch gehen:
Code:
DatumS = DatumS + %Years(%SubDt(DatumT: *Y) - %SubDt(DatumS: *Y));
Birgitta
-
Aber jetzt mal ehrlich...
Warum nicht: TDATUM = %years(%subdt(TDATUM:*Y));
Uebrigens: Birgitta, well done. Aber Baldurs Lösung geht auch. ;-)
kf
-
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.
-
 Zitat von camouflage
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
-
%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));
-
 Zitat von Fuerchau
%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
-
Wie ist das mit dem letzten Tag im Februar bei Schaltjahren?
-
Wenn man vom 1.3.nnnn einen Tag abzieht erhält man den 28/29.2.nnnn.
-
 Zitat von Pikachu
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
Similar Threads
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 25-07-14, 15:45
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 13
Letzter Beitrag: 18-05-14, 16:26
-
By tarkusch in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 09-11-13, 14:08
-
By Matthias.Hayn in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 15-07-02, 07:03
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks