×

Good News Everybody!

The new search engine is LIVE!

Please report any problems to david (at) midrange.com.




Oops.  You are right.  Forgot to add one month on subdt.  Thanks for the
correction.  
Also %month(1) should be %months(1)  

-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of HauserSSS
Sent: Monday, March 27, 2006 11:13 PM
To: RPG programming on the AS400 / iSeries
Subject: AW: Bug in IBM Date Routies %month

Hi Lim,

>>date1 = date1 + %month(1) - %days(%subdt(date1:*days))

this formula is not correct either.
Try to determine the end of month for January, 30th!

The correct formula is:
Date1 = Date1 + %Month(1) - %Days(%SubDt(Date1 + %Month(1)): *Days))

Note: In Release V5R4M0 you also can use the SQL scalar function
LAST_DAY to determine the end of month:
EXEC SQL  Set :NewDate = LAST_DAY(:MyDate);

Mit freundlichen Gru?en / Best regards

Birgitta

"Shoot for the moon, even if you miss, you'll land among the stars."
(Les Brown)

-----Ursprungliche Nachricht-----
Von: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx]Im Auftrag von Lim Hock-Chai
Gesendet: Dienstag, 28. Marz 2006 00:53
An: RPG programming on the AS400 / iSeries
Betreff: RE: Bug in IBM Date Routies %month


If you need the date to always be the month end date, you can simply do
below:
date1 = date1 + %month(1) - %days(%subdt(date1:*days))

I don't think you can do the samething in java.  Not on one statemnet
anyway.  I try to do it in two separate statement and get the same
result 3/28/06:
package myTest;

import java.util.*;

public class MyTest {

        public static void main(String[] args) {

                GregorianCalendar myDate = new GregorianCalendar(2006,
0, 31,0,0,0);
                System.out.println(
                        "Year="+myDate.get(Calendar.YEAR)+';'+
                        "Month="+myDate.get(Calendar.MONTH)+';'+
                        "Day="+myDate.get(Calendar.DATE));

                myDate.add(Calendar.MONTH, 1);
                System.out.println(
                        "Year="+myDate.get(Calendar.YEAR)+';'+
                        "Month="+myDate.get(Calendar.MONTH)+';'+
                        "Day="+myDate.get(Calendar.DATE));

                myDate.add(Calendar.MONTH, 1);
                System.out.println(
                        "Year="+myDate.get(Calendar.YEAR)+';'+
                        "Month="+myDate.get(Calendar.MONTH)+';'+
                        "Day="+myDate.get(Calendar.DATE));
                System.exit(0);
        }
}

Below if the result when run above:
Year=2006;Month=0;Day=31
Year=2006;Month=1;Day=28
Year=2006;Month=2;Day=28

-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of praveen gunda
Sent: Monday, March 27, 2006 3:36 PM
To: RPG programming on the AS400 / iSeries
Subject: Re: Bug in IBM Date Routies %month

I think IBM should have taken care of this, similar to how they have
taken care of this.

2006-01-31 + %months(1) = 2006--2-28

Also,
2006-01-31 + %months(2) should be consistent with 2006-01-31 +
%months(1) +
%months(1)

Adding 2 months or adding 1 month + 1 months should be same right?

I write a lot in Java, and have never came across such a problem.



On 3/27/06, Michael_Schutte@xxxxxxxxxxxx <Michael_Schutte@xxxxxxxxxxxx>
wrote:
>
> You get the same issue when you do it with the date of 3/31/2006 
> instead of
> 1/31/2006
>
> Michael Schutte
> Work 614-492-7419
> email  michael_schutte@xxxxxxxxxxxx
>
>
>
>              "Peter Dow (ML)"
>              <maillist@dowsoft
>              ware.com>
To
>              Sent by:                  RPG programming on the AS400 /
>              rpg400-l-bounces+         iSeries <rpg400-l@xxxxxxxxxxxx>
>              michael_schutte=b
cc
>              obevans.com@midra
>              nge.com
Subject
>                                        Re: Bug in IBM Date Routies 
> %month
>
>              03/27/2006 04:23
>              PM
>
>
>              Please respond to
>               RPG programming
>               on the AS400 /
>                   iSeries
>              <rpg400-l@midrang
>                   e.com>
>
>
>
>
>
>
> Hi Praveen,
>
> Actually, that's not a bug, it's a problem with intermediate values.
> When you add 1 month to 2006-01-31, what do you get?  2006-02-31 is 
> not a valid date; instead you get 2006-02-28 (see the manual).  When 
> you then add 1 month to that, you get 2006-03-28.  Date arithmetic is 
> tricky...
>
> hth,
>
> Peter Dow
> Dow Software Services, Inc.
> 909 793-9050
>
> praveen gunda wrote:
> > I found the following bug with IBM Date rountines... Was there a fix

> > for this?
> >
> >
> >      Ddate1            s               d   datfmt(*ymd)
> >       /Free
> >        cymd = 20060131;
> >        date1 = %date(cymd:*ISO);
> >        dsply %char( (date1+%months(2)):*iso );
> >        dsply %char( (date1+%months(1)+%months(1)) :*iso);
> >      /End-Free
> >
> >
> > Heres' the output:
> >
> >  DSPLY  2006-03-31
> >  DSPLY  2006-03-28
> >
> > Shouldn't it be 2006-03-31 both the times.
> >
>
> --
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing 
> list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, 
> unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a 
> moment to review the archives at http://archive.midrange.com/rpg400-l.
>
>
>
> --
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing 
> list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, 
> unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a 
> moment to review the archives at http://archive.midrange.com/rpg400-l.
>
>
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.


--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.



--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.



This thread ...

Follow-Ups:

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

This mailing list archive is Copyright 1997-2026 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.