View Full Version : Woche des Monats, Quartal
programmer400
09-12-13, 11:36
Wie kann ich in ILE am besten die Woche des Monats bzw. das Quaral ermitteln. Basis wäre das aktuelle Tagesdatum.
Es soll z.B. immer Ende der 4.Woche eines Monats bzw. Ende eines Quartals eine bestimmte Aktion durchgeführt werden.
KingofKning
09-12-13, 11:56
Also mit wrkjobscde kannst Du einen Job erstellen der immer am Monatsende läuft.
(Ich weiß, hilft die bei ILE RPG nicht weiter, wäre aber evtl. eine Alternativlösung)
GG
Das kannst du eigentlich per ADDJOBSCDE automatisieren. Da gibt es die diversen Möglichkeiten für genau solche Aktionen.
programmer400
09-12-13, 12:37
Ich brauch aber den betreffenden Wert als Parameter im Programm, da ich im Programm einen FTP-Command zusammenbastle, der mir dann zum jeweiligen Zeitpunkt in ein, für diesen Zeitpunkt gültiges Verzeichnis, was reinschreibt.
Ab V6 hilft dir da VARCHAR_FORMAT:
http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/topic/db2/rbafzscavarcharformat.htm?resultof=%22%77%65%65%6b %22%20%22%6f%66%22%20%22%6d%6f%6e%74%68%22%20
Beispiel:
select varchar_format(current timestamp, 'Q W MM D')
from sysibm/sysdummy1
Q = Quartal
W = Woche im Monat
MM = Monat
D = Wochentag
u.v.m.
KingofKning
09-12-13, 13:42
Wenn der Job über den Scheduler läuft bräuchtest Du ja nur das Tagesdatum abzufragen. Dann hättest Du deinen Parameter
GG
programmer400
10-12-13, 18:09
@F: hab leider nur ein älteres OS zur Verfügung.
@KoK: Bitte um Hilfe - wie geh ich das an?
Vielleicht hilft ja folgender Ansatz. Hatte da mal ein Programm, was an Hand des Datums das Jahr, Woche, Wochentag ermittelt. Und wenn Du Monat und/bzw Woche hast, sollte auch das Quartal zu ermitteln sein
d Datum s d datfmt(*eur)
d Woche s 3u 0
d WoTag s 3u 0
d Jahr s 4s 0
d
d parm_Dat s 8a
d parm_WoTag s 10a
d parm_DayOf s 1a
d parm_Woche s 2a
d parm_Jahr s 4
d
d Datum_num s 8 0
d
d ds
d $woche 10a
d dim(7)
d 1 10a inz('Montag ')
d 11 20a inz('Dienstag ')
d 21 30a inz('Mittwoch ')
d 21 30a inz('Mittwoch ')
d 31 40a inz('Donnerstag')
d 41 50a inz('Freitag ')
d 51 60a inz('Samstag ')
d 61 70a inz('Sonntag ')
c *entry plist
c parm parm_Dat
c parm parm_WoTag
c parm parm_DayOf
c parm parm_Woche
c parm parm_Jahr
c
c move parm_Dat datum_num
c move datum_num datum
c
c/EXEC SQL
c+ set :Woche = week_iso(:Datum)
C/END-EXEC
c/EXEC SQL
c+ set :WoTag = DayOfWeek_iso(:Datum)
C/END-EXEC
c
c*
c Select
c When woche = 1
c and
c %SubDt(Datum: *M) = 12
c eval Jahr = %SubDt(Datum: *Y) + 1
c When woche >= 52
c and
c %SubDt(Datum: *M) = 1
c eval Jahr = %SubDt(Datum: *Y) - 1
c Other
c eval Jahr = %SubDt(Datum: *Y)
c EndSl
c*
c eval parm_WoTag = $Woche(Wotag)
c move wotag parm_DayOf
c move woche parm_woche
c move Jahr parm_Jahr
c*
c return
In ähnlicher Form findest du das Programm hier bestimmt noch mal im Forum
(Danke an dieser Stelle noch mal an Birgitta)
Gruß Ronald
Das ist aber die "Woche des Jahres".
Die "Woche des Monats" liegt immer zwischen 1-4/5.
So kann ich im JOBSCD bestimmen, dass immer am letzten Freitag eines Monats oder immer am Dienstag in der 2 Woche eines Monates welche Jobs gestartet werden.
Sicherlich kann ich mir dieses zu nutze machen in dem ich an das aufgerufene Programm einen eintsprechenden Parameter (als Konstante) übergebe und die Art des Aufrufes zu bestimmen (wie oben vorgeschlagen).
Upps,
wieder nicht richtig gelesen....
..Thema verfehlt! .. Setzen, Sechs!
;-)