× 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.



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.
>


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
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.