× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



In this instance I might do the (test D E ) followed by getting last week's
ending date. If the job date is greater than the last week's date I'd just
add 7 days to the answer already gotten.
 
But beyond that..  why do you do it over and over?  Once at the beginning of
the program would seem plenty.  Get the two ending dates and save them as
test fields.  If job date > last weeks date use this week's date, else use
last weeks date. That'd seem to be your biggest saver of time.
 
 
---------------------------------------------------------
Booth Martin   http://www.MartinVT.com
Booth@xxxxxxxxxxxx
---------------------------------------------------------
 
-------Original Message-------
 
From: RPG programming on the AS400 / iSeries
Date: Thursday, May 15, 2003 8:55:33 AM
To: RPG programming on the AS400 / iSeries
Subject: RE: Date arithmetic - performance dog?
 
That's worth a try. I never even thought of that. Here's an example of
something the program does many times. In looking at it now, I think I even
TEST(D E) endDate further down in the process which makes no sense! The
routine is done thousands of times and the other routine gets into the
millions. Might make a difference. Thank you.
 
 
* test for valid date. 
c test(d e) XQ03 
c if not %error 
 
* if XQ03's week ending date is beyond today, set the week start/end to 
* the previous week's 
c if #getWkEndDate( %date(XQ03) ) > jobDate 
c eval beginDate = #getPrvWkStart( jobDate ) 
c eval endDate = #getPrvWkEnd( jobDate ) 
c move endDate endDate# 
 
* else set valid week start and end dates 
c else 
c eval beginDate = #getWkStrDate( %date(XQ03) ) 
c eval endDate = #getWkEndDate( %date(XQ03) ) 
c endif 
 
* else invalid date, set week start/end dates to previous week 
c else 
c eval beginDate = #getPrvWkStart( jobDate ) 
c eval endDate = #getPrvWkEnd( jobDate ) 
c endif 
 
 
 
 
-----Original Message-----
From: Hans Boldt [mailto:boldt@xxxxxxxxxx]
Sent: Thursday, May 15, 2003 9:12 AM
To: rpg400-l@xxxxxxxxxxxx
Subject: Re: Date arithmetic - performance dog?
 
 
Mlpolutta@xxxxxxx wrote:
> I wanted to see if you folks have found that ADDDUR and SUBDUR (etc.), and
MOVEing to/from date fields are REALLY poor performers - it sure seems that
way to me. Is there a way to make such things perform well?
 
The performance of the date/time/timestamp operations is indeed a 
touch on the slow side. The reason is that each operation does a 
validity check on the values.
 
The only suggestion I have is that if you're converting from 
character or numeric to a D/T/Z value, don't check first using a 
TEST operation. Just convert directly using the appropriate built-in 
function (%DATE, %TIME, or %TIMESTAMP) wrapped in a MONITOR group. 
That will at least save one validity check.
 
For example:
 
MONITOR;
DATE=%DATE(DSTR:*YMD);
ON-ERROR 112;
DSPLY 'Egads! We have a bad date value!';
ENDMON;
 
Cheers! Hans
 
. 


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.