|
Did I miss something? Why wouldn't you use SUBDUR in RPG IV to calculate the number of days between two dates? The question always get is how to do exactly what you've already done; calculate 50 years, 11 months, 30 days. Which you can't do natively in RPG IV, directly. -Bob Cozzi www.RPGxTools.com RPG xTools - Enjoy programming again. -----Original Message----- From: mi400-bounces+cozzi=rpgiv.com@xxxxxxxxxxxx [mailto:mi400-bounces+cozzi=rpgiv.com@xxxxxxxxxxxx] On Behalf Of Beppe Costa Sent: Monday, October 17, 2005 3:39 AM To: MI Programming on the AS400 / iSeries Subject: Re: [MI400] Compute Date Duration For those who are interested to explore the MI builtin _CDD, the code follows. It returns a duration in the format 8,0 Pack. In this case the returned value is 00501130 (that is 50 years + 11 month + 30 days). Than, how can I convert this figure to a number of days ? I've also tried to use CVTD but always unsuccesfully. =========== h dftactgrp(*no) actgrp('QILE') d DateFrom s 10 inz('1954-12-03') d DateTo s 10 inz('2005-12-02') d Duration s 8P 0 d CDD PR ExtProc('_CDD') d DateDuration * value d Date1 * value d Date2 * value d InstTemplate * value d TemplateT1 ds d TemplateSize 10I 0 inz(%len(TemplateT1)) d DDAT_1 5I 0 inz(1) d DDAT_2 5I 0 inz(2) d DDAT_3 5I 0 inz(2) d Reserved1_2 2 inz(*allx'00') d Length_2 5I 0 inz(10) d Length_3 5I 0 inz(10) d Reserved3_26 26 inz(*allx'00') d*---- DDAT list --- d DDAT_Size 10I 0 inz(198) d Num_DDATs 5I 0 inz(2) d Reserved4_10 10 inz(*allx'00') d D1_Offset 10I 0 inz(24) d D2_Offset 10I 0 inz(140) d*---- DDAT_1 ------ d D1_lenght 5I 0 inz(116) d D1_format 5I 0 inz(x'0014') d D1_datseptype 1 inz(x'00') d D1_timseptype 1 inz(x'00') d D1_hourzone 5I 0 inz(0) d D1_minzone 5I 0 inz(0) d D1_monthdef 5I 0 inz(0) d D1_yeardef 5I 0 inz(0) d D1_curcent 10I 0 inz(0) d D1_centdiv 10I 0 inz(0) d D1_caltoff 10I 0 inz(0) d D1_resvd1_6 6 inz(*allx'00') d D1_eratableN 5I 0 inz(0) d D1_eratable 48 inz(*allx'00') d D1_caltableN 5I 0 inz(0) d D1_caltable1n 16 inz(*allx'00') d D1_caltable2 16 inz(*allx'00') d*---- DDAT_2 ------ d D2_lenght 5I 0 inz(116) d D2_format 5I 0 inz(x'0003') d*-D2_separator 2 d D2_datseptype 1 inz(x'00') d D2_timseptype 1 inz(x'00') d*-D2_timezone 4 d D2_hourzone 5I 0 inz(0) d D2_minzone 5I 0 inz(0) d*-D2_duratdef 4 d D2_monthdef 5I 0 inz(0) d D2_yeardef 5I 0 inz(0) d*-D2_century 8 d D2_curcent 10I 0 inz(0) d D2_centdiv 10I 0 inz(0) d D2_caltoff 10I 0 inz(82) d D2_resvd1_6 6 inz(*allx'00') d*-D2_eratb 50 inz(*allx'00') d D2_eratbNum 5I 0 inz(1) d D2_eratbOrig 10I 0 inz(1721424) d D2_eratbName 32 inz('AD') d D2_eratbRsvd 12 inz(*allx'00') d*-D2_caltable 34 inz(*allx'00') d D2_caltbNum 5I 0 inz(2) d D2_caltb1Date 10I 0 inz(1721424) d D2_caltb1Type 5I 0 inz(x'0001') d D2_caltb1Rsvd 10 inz(*allx'00') d D2_caltb2Date 10I 0 inz(5373485) d D2_caltb2Type 5I 0 inz(x'0000') d D2_caltb2Rsvd 10 inz(*allx'00') /free CDD (%addr(duration): %addr(DateTo): %addr(DateFrom): %addr(TemplateT1)); *inlr = *on; /end-free ----- Original Message ----- From: "Dave McKenzie" <davemck@xxxxxxxxxxxxx> To: "MI Programming on the AS400 / iSeries" <mi400@xxxxxxxxxxxx> Sent: Friday, October 14, 2005 6:27 PM Subject: Re: [MI400] Compute Date Duration > Beppe, > > In the CDD documentation it says "The DDAT for operand 1 must be valid > for a date duration." > > In the list of format codes it lists "Date duration" (x14) as separate > from the "Labeled durations" (x0D - x13). > > Maybe that means that the only valid format code for operand 1 is x14. > > In any case, I don't know exactly what a "labeled duration" is. > > --Dave > > Beppe Costa wrote: > > I've tried to call CDD from RPG as ExtProc('_CDD') and from MI. > > > > When the DDAT 1 is of type x'0014' I pass a pointer to a packed 8,0 and CDD > > returns correct data (number of years+number of month+number of days). > > > > When the DDAT 1 is of type x'000F' I pass a pointer to a packed 15,0 and it > > fails. The message says "exactly" that the error is at offset x'0004' where > > DDAT 1 starts. > > > > A similar error occurs when I use a format other than ISO or a char(6) date > > for DDAT 2 and DDAT 3. > > > > For example If I use a YYMMDD date it works fine. If I try to use a CYYMMDD > > or another format it crashes and the MCH5601 signals the offset od DDAT 2. > > > > Btw in the meanwhile I solved the problem and I compute the duration in > > another way but it would be interesting to see if there is someone that > > tried to use this instruction. > > > > Giuseppe. > > > > ----- Original Message ----- > > From: "Postmaster" <fbns@xxxxxxxxxxxxxxxxx> > > To: "MI Programming on the AS400 / iSeries" <mi400@xxxxxxxxxxxx> > > Sent: Tuesday, October 11, 2005 1:24 PM > > Subject: Re: [MI400] Compute Date Duration > > > > > >>On 11/10/2005, at 6:48 PM, Beppe Costa wrote: > >> > >>>Simon, > >>>I don't think that there is a validation on the output parameter > >>>because > >>>it's only a pointer. > >>Are you trying to run CDD from C or MI? If from C then you pass a > >>pointer to a packed decimal variable. If from MI then you pass the > >>scalar itself. > >> > >>The error you reported is caused by validating the 4th input parameter. > >>All MI instructions that accept a template validate the content of the > >>template. When the template contains an invalid value the MCH5601 > >>message is sent. This message tells you exactly what part of the > >>template is invalid. > >> > >>>Btw I'm missing something because the DDAT1 duration in x0014 is > >>>returned > >>>correctly with ISO and YMD date but I can't get it with other date > >>>format. > >>>And in any case I can never get a Labeled Duration. Unfortunately the > >>>only > >>>documentation is from a single page in the MI functional reference and > >>>an > >>>example in C that uses ISO dates. I've found nothing else. > >>http://publib/boulder.ibm.com/infocenter/iseries/v5r3/topic/rzatk/ > >>topics.htm > >> > >>Click Date/Time/Timestamp > >> > >>Click Date/Time Concepts > >> > >>Read carefully. > >> > >>>Thanks in any > >>>case for your response. > >>>Giuseppe. > >>> > >>> > >>>----- Original Message ----- > >>>From: "Simon Coulter" <shc@xxxxxxxxxxxxxxxxx> > >>>To: "MI Programming on the AS400 / iSeries" <mi400@xxxxxxxxxxxx> > >>>Sent: Monday, October 10, 2005 11:41 PM > >>>Subject: Re: [MI400] Compute Date Duration > >>> > >>> > >>>>On 10/10/2005, at 10:53 PM, Beppe Costa wrote: > >>>> > >>>>>I'm trying to use the the MI CDD. > >>>>> > >>>>>When Operand1 is a DDAT x'0014' (Date Duration) I get the right value > >>>>>expressed in Years, Month and Days but when Operand1 is x'000F' > >>>>>(Labeled Duration DAY) I always get a "template value invalid". > >>>>Show the complete message text of the MCH5601 message. The > >>>>substitution > >>>>text will usually tell you what part of the template is wrong. > >>>> > >>>>My guess is that the variable containing the duration value is of the > >>>>wrong type. For x'0014' it must be PKD(8,0) but for x'000F' it must be > >>>>PKD(15,0) > >>>> > >>>>Regards, > >>>>Simon Coulter. > >>>>-------------------------------------------------------------------- > >>>> FlyByNight Software AS/400 Technical Specialists > >>>> > >>>> http://www.flybynight.com.au/ > >>>> Phone: +61 3 9419 0175 Mobile: +61 0411 091 400 /"\ > >>>> Fax: +61 3 9419 0175 \ / > >>>> X > >>>> ASCII Ribbon campaign against HTML E-Mail / \ > >>>>-------------------------------------------------------------------- > > _______________________________________________ > This is the MI Programming on the AS400 / iSeries (MI400) mailing list > To post a message email: MI400@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/mi400 > or email: MI400-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/mi400. > _______________________________________________ This is the MI Programming on the AS400 / iSeries (MI400) mailing list To post a message email: MI400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/mi400 or email: MI400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/mi400.
As an Amazon Associate we earn from qualifying purchases.
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.