Re: Compute Date Duration
Dave McKenzie <[email protected]>
| Newsgroups | gmane.comp.lang.as400.mi |
|---|---|
| Message-ID | <[email protected]> |
Very concise and clear exposition! Why couldn't they include that kind of stuff in the documentation? :-) Simon, you're an old IBMer aren't you? Anybody left in Rochester that you know? :-) --Dave Simon Coulter wrote: > OK. Here's what some experimentation shows: > > CDD will calculate a duration between character format dates. This is > consistent with the CDD instruction description which states that > operands 2 and 3 must be character scalars. That means the only valid > date types for operands 2 and 3 are: > USA > ISO > EUR > JIS > System Internal Date (Scaliger number) > *MMDDYY > *DDMMYY > *YYMMDD > *YYDD > *YYYYDDD > > Default separators are required for the first 5 but the last 5 can have > any separator or no separator as long as the DDAT correctly describes > the separator. If the specified date value does not match the DDAT then > MCH1222 will occur. > > NOTE:- The scaliger number specified for the System Internal Date type > must not exceed the end date of the Calendar (else MCH1221) nor must it > be earlier than the start date of the Calendar (else MCH1224). > > CDD does not support other date formats so if you have dates in other > formats (e.g. packed or zoned numeric) you must first convert them to a > format that CDD does support. > > Most DDAT errors will cause MCH1867 but some will cause MCH5601. Errors > in the first 58 bytes of the template will cause MCH5601. > > CDD always returns a Date Duration. That is an 8,0 packed decimal value > in the form YYYYMMDD which is interpreted as YYYY years, MM months, and > DD days. Specifying any other format type will result in MCH5601. > > I also discovered that if the Calendar Table is not allowed for a > particular format type (such as Date Duration) then if you specify zero > for the Calendar Offset you can omit the Calendar Table entirely. > > However the Era Table must be present (and set to X'00' for a Date > Duration) otherwise MCH1867 is sent with reason code 19 > > Further the DDAT_List_Size (as distinct from the DDAT_Length which can > be anything including zero) is validated for being greater than 0 but > otherwise seems to tolerate incorrect values. Not that I'm advocating > doing so but it is interesting. When it is zero the #cfdate module gets > the DDAT number wrong in MCH1867. It shows 16448 which is the value of > an uninitialised BIN(2). > > So that just leaves the question of how to convert a Date Duration to a > Labelled Duration and that can be done with maths. > > I haven't found an MI instruction that will generate a Labelled > Duration. They seem to be valid only as input to the various INC and DEC > instructions. > > 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-Zwy7GipZuJhWk0Htik3J/[email protected] To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/mi400 or email: MI400-request-Zwy7GipZuJhWk0Htik3J/[email protected] Before posting, please take a moment to review the archives at http://archive.midrange.com/mi400.