|
Werner, I meanwhile noticed that there exist date formats ending in '0' (as in zero), which I didn't know before. Thanks for the help. Peter Peter, find enclosed some snippets, I collected in the past for date operations in FREE-Format: D #TmStmp S ? ? ? ? ? ? ? Z D #TodayDate S ? ? ? ? ? ? ? D DatFmt(*ISO) D #TodayTime S ? ? ? ? ? ? ? T TimFmt(*HMS) D #DateEUR S ? ? ? ? ? ? ? D DatFmt(*EUR) D #DateISO S ? ? ? ? ? ? ? D DatFmt(*ISO) D #TimeISO S ? ? ? ? ? ? ? T TimFmt(*ISO) D #DatNumEUR S ? ? ? ? ? ? ?8S 0 Inz(22032001) D #DatNumISO S ? ? ? ? ? ? ?8S 0 D #DatNum6 S ? ? ? ? ? ? ?6S 0 D #DatNum7 S ? ? ? ? ? ? ?7S 0 D #TimNum S ? ? ? ? ? ? ?6S 0 Inz(113614) D #CharDate S ? ? ? ? ? ? ?8A Inz('20020322') D #CharTime S ? ? ? ? ? ? ?6A Inz('113614') D #CharDate10 S ? ? ? ? ? ? 10A D FldChar6 S ? ? ? ? ? ? ?6A D FldChar7 S ? ? ? ? ? ? ?7A D FldChar8 S ? ? ? ? ? ? ?8A D FldChar9 S ? ? ? ? ? ? ?9A D FldChar10 S ? ? ? ? ? ? 10A D FldChar14 S ? ? ? ? ? ? 14A D FldNum3 S ? ? ? ? ? ? ?3S 0 D FldNum4 S ? ? ? ? ? ? ?4S 0 D FldNum6 S ? ? ? ? ? ? ?6S 0 D FldNum7 S ? ? ? ? ? ? ?7S 0 D FldNum8 S ? ? ? ? ? ? ?8S 0 D FldPack20 S ? ? ? ? ? ? 20P 0 D #CurCY S ? ? ? ? ? ? ?4S 0 D #CurMon S ? ? ? ? ? ? ?2S 0 D #CurDay S ? ? ? ? ? ? ?2S 0 D #Hours S ? ? ? ? ? ? 10S 0 D #Minutes S ? ? ? ? ? ? ?2S 0 D #Seconds S ? ? ? ? ? ? ?2S 0 D #NumYears S ? ? ? ? ? ? 11S 0 D #NumMonth S ? ? ? ? ? ? 11S 0 D #NumDays S ? ? ? ? ? ? 11S 0 D #NumHours S ? ? ? ? ? ? 11S 0 D #NumMinutes S ? ? ? ? ? ? 11S 0 D #NumSeconds S ? ? ? ? ? ? 11S 0 D DS D $StrTmStmp Z ? Inz D ?#StrDate D ? Overlay ($StrTmStmp:1) D ?#StrTime T ? Overlay ($StrTmStmp:12) D DS D $EndTmStmp Z ? Inz D ?#EndDate D ? Overlay ($EndTmStmp:1) D ?#EndTime T ? Overlay ($EndTmStmp:12) D #Diff 10I 0 D $TimDiff DS D ?#DiffHours 7S 0 D ?#DiffMinutes 2S 0 D ?#DiffSeconds 2S 0 *--------------------------------------------------------------- /free ? // Retrieve current date ? #TodayDate=%date (); ? // Convert numeric field into date field #DatNumISO=20020325; ? #DateISO=%date (#DatNumISO:*iso); ? // Convert character field into date field ? #CharDate ='20020325'; ? #DateISO=%date (#CharDate:*iso0); ? // Convert character field with date into numeric field with date ? FldChar6 ='080303'; ? #DatNumISO=%int (%char (%date(FldChar6: *dmy0):*iso0)); ?// Convert numeric field with date into numeric field with date #DatNumISO=20030315; ?#DatNum6=%int (%char(%date (#DatNumISO:*iso): *dmy0)); ?#DatNum6=%int (%char(%date (#DatNumISO:*iso): *ymd0)); ?#DatNum7=1030704; ?#DatNum6=%int (%char(%date (#DatNum7:*cymd): *dmy0)); ?// Convert character field to date field ?#CharDate10 ='2002-03-25'; ?#DateISO=%date (#CharDate10: *iso); ?// Convert current date to numeric field ?#DatNumISO=%int (%char(%date(): *iso0)); ?// Convert date field to numeric field ?#DatNumISO=%int (%char(#DateISO: *iso0)); ?#DatNum6=%int (%char(#DateISO: *dmy0)); ?#DatNum7=%int (%char(#DateISO: *cymd0)); ?// Convert date field to character field with separator . ?FldChar8=%char (#DateISO:*dmy.); ?// Retrieve day of year into numeric field (from given date) ?#DateISO=%date ('20030725': *iso0); ?FldNum3=%int (%subst(%char (#DateISO: *jul0):3:3)); ?// Retrieve day of year into numeric field (from current date) ?FldNum3=%int (%subst(%char (%date(): *jul0):3:3)); ?// Retrieve current time ?#TodayTime=%time (); ?// Convert current time numeric field ?#TimNum=%int (%char(%time(): *iso0)); ?// Convert current time numeric field (only HHMM) ?FldNum4 = %int (%subst(%char (%time(): *iso0):1:4)); ?// Convert numeric field into time field ?#TodayTime=%time (#TimNum:*iso); ?// Convert character field into time field ?#TodayTime=%time (#CharTime:*iso0); ?// Create individual timestamp. Example: DDMMHHMMSS ?FldChar10 = %subst(%triml (%editw(%subdt (%date():*D):'0 ')): ? ? ? ? ? ? ?8:2) + %subst(%triml (%editw(%subdt (%date():*M):'0 ')): ? ? ? ? ? ? ?8:2) + %subst(%triml (%editw(%int(%char (%time():*iso0)): ? ? ? ? ? ? ?'0 ')):4:6); ?// Add 3 days to #DatNum7 and convert the result to #DatNumISO ?#DatNumISO = %int (%char(%date (#DatNum7:*cymd) + %days(3):*iso0)); ?// Add 3 days to current date and convert the result to a character field ?FldChar8 = %char (%date() + %days(3):*iso0); ?// Add seconds to a numeric field ? #TimNum = %int (%char(%time (#TimNum:*iso) + %seconds(1): *iso0)); ? // Retrieve current timestamp ? #TmStmp =%timestamp(); ? // Retrieve string YYYYMMDDHHMMSS from current timestamp ? FldChar14 = %subst(%char (%timestamp: *iso0):1:14); ? // Retrieve full timestamp into numeric field (Resultfield must be packed) ? FldPack20 = %dec (%char(%timestamp ():*iso0):20:0); ? // Date/Time codes: *YEARS(*Y), *MONTHS(*M), *DAYS (*D), *HOURS(*H), ? // *MINUTES(*MN), *SECONDS(*S), *MSECONDS(*MS) ? // Extract year/month/day from date field ? #CurCY =%subdt (#TodayDate:*Y); ? #CurMon=%subdt (#TodayDate:*M); ? #CurDay=%subdt (#TodayDate:*D); ? // Extract hours/minutes/seconds from time field ?#Hours ?=%subdt (#TodayTime:*H); ?#Minutes=%subdt (#TodayTime:*MN); ?#Seconds=%subdt (#TodayTime:*S); ?// Add/subtract years, months, days to date field ?#DateISO =#DateISO+%years(1); ?#DateISO =#DateISO+%months(6); ?#DateISO =#DateISO+%days(30); ?#DateISO =#DateISO-%years(1); ?#DateISO =#DateISO-%months(6); ?#DateISO =#DateISO-%days(30); ?// Add/subtract hours, minutes, seconds ?#TimeISO =#TimeISO+%hours(1); ?#TimeISO =#TimeISO+%minutes(15); ?#TimeISO =#TimeISO+%seconds(10); ?#TimeISO =#TimeISO-%hours(1); ?#TimeISO =#TimeISO-%minutes(15); ?#TimeISO =#TimeISO-%seconds(10); ?// Calculate date and time differences ?#NumYears=%diff (#TodayDate: #DateISO:*Y); ?#NumMonth=%diff (#TodayDate: #DateISO:*M); ?#NumDays =%diff (#TodayDate: #DateISO:*D); ?#NumHours =%diff(#TodayTime: #TimeISO:*H); ?#NumMinutes =%diff(#TodayTime: #TimeISO:*MN) ?#NumSeconds =%diff(#TodayTime: #TimeISO:*S); ?// Test valid date in numeric fields ?FldNum8=20020325; ?test(de) *iso FldNum8; ?if %error; ?// . . . ?endif; ?FldNum7=1020325; ?test(de) *cymd FldNum7; ?if %error; ?// . . . ?endif; ?FldNum6=250302; ?test(de) *dmy FldNum6; ?if %error; ?// . . . ?endif; ?// Test valid date in character fields ?FldChar10 ='2002-03-25'; ?test(de) *iso FldChar10; ?if %error; ?// . . . ?endif; ?FldChar8 ='20020325'; ?test(de) *iso0 FldChar8; ?if %error; ?// . . . ?endif; ?FldChar9 ='102/03/25'; ?test(de) *cymd FldChar9; ?if %error; ?// . . . ?endif; ?FldChar7 ='1020325'; ?test(de) *cymd0 FldChar7; ?if %error; ?// . . . ?endif; ?FldChar8 ='25/03/02'; ?test(de) *dmy FldChar8; ?if %error; ?// . . . ?endif; ?FldChar6 ='250302'; ?test(de) *dmy0 FldChar6; ?if %error; ?// . . . ?endif; ?// Test valid time in numeric fields ?FldNum6=103521; ?test(te) *iso FldNum6; ?if %error; ?// . . . ?endif; ?// Test valid time in character fields ?FldChar6 ='103521'; ?test(te) *iso0 FldChar6; ?if %error; ?// . . . ?endif; ?// Calculate time difference between start- and end date/time. ?// ? Result fields are contained in DS $TimDiff ?#EndDate =%date(20031011: *iso); ?#EndTime =%time(060000: *iso); ?#StrDate =%date(20031008: *iso); ?#StrTime =%time(000000: *iso); ?#Diff = %diff ($EndTmStmp:$StrTmStmp: *seconds); ?#DiffHours ? = #Diff/3600; ?#DiffMinutes = (#Diff - #DiffHours * 3600) / 60; ?#DiffSeconds = #Diff - #DiffHours * 3600 - #DiffMinutes * 60; ?// Retrieve date of last day of a month ?#TodayDate = %date(); // Example ?#DateISO = (#TodayDate + %months(1)) - ? ? ? ? ? ? %days (%subdt(#TodayDate + %months(1):*D)); ?Return; /end-free Hope this helps! Regards, GEFIS Gesellschaft für Individual-Software mbH Werner Noll ______________________________________________________________________ The information contained in this communication is confidential and may be legally privileged. It is intended solely for the use of the individual or the entity to whom it is addressed and others authorised to receive it. If you have received it by mistake, please let the sender know by e-mail reply and delete it from your system. If you are not the intended recipient you are hereby notified that any disclosure, copying, distribution or taking any action in reliance of the contents of this information is strictly prohibited and may be unlawful. Honda Europe NV is neither liable for the proper and complete transmission of the information contained in this communication nor for any delay in its receipt.
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.