Date and Time Functions
|
DATETIME.WBT Version 1.19 2003:10:02
User Defined Functions Library for WinBatch.
Includes calculations for German Holidays.
Enthält Berechnungen für deutsche Feiertage.
|
|
;==========================================================================================================================================
; udflib.DateTime.wbt
;==========================================================================================================================================
; Date and Time Functions v1.19
; User Defined Functions for WinBatch.
;
; Detlev Dalitz.20010325.20020201.20020709.20020719.20020722.20020723.20020725.20020804.20021112.20021202...
; ...20030213.20030604.20030620.20030711.20030819.20030820.20030920.20030924.20030925.20031002.
;==========================================================================================================================================
;==========================================================================================================================================
; Overview
;------------------------------------------------------------------------------------------------------------------------------------------
; udfSayNoYes (bool) ; Returns string "No" or "Yes"
;------------------------------------------------------------------------------------------------------------------------------------------
; udfTimeFormatStr (YmdHms,TaggedStr) ; Returns string formatted as defined in TaggedStr
;------------------------------------------------------------------------------------------------------------------------------------------
; udfIsValidDate (YmdHms) ; Returns boolean, false or true (0..1)
; udfIsValidDateTime (YmdHms) ; Returns boolean, false or true (0..1)
;------------------------------------------------------------------------------------------------------------------------------------------
; udfIsLeapYear (YmdHms) ; Returns boolean, false or true (0..1)
; udfIsJulianLeapYear (YmdHms) ; Returns boolean, false or true (0..1)
;------------------------------------------------------------------------------------------------------------------------------------------
; udfJulianDayOfWeek (YmdHms) ; Returns number, range=0..6 = Sunday..Saturday
; udfDayOfWeek (YmdHms) ; Returns number, range=1..7 = Monday..Sunday
; udfDayOfYear (YmdHms) ; Returns number, range=1..366
; udfWeekOfYear (YmdHms) ; Returns number, range=0..53
; udfWeekOfMonth (sYmdHms, iMode) ; Returns number, range=1..6
;------------------------------------------------------------------------------------------------------------------------------------------
; udfNameOfDay (sYmdHms, iLength) ; Returns string of at least iLength number of characters. Range iLength=0..n
; udfNameOfMonth (sYmdHms, iLength) ; Returns string of at least iLength number of characters. Range iLength=0..n
;------------------------------------------------------------------------------------------------------------------------------------------
; udfTimeDMY (YmdHms) ; Returns string formatted as "dd.mm.yyyy"
; udfTimeDMYShort (YmdHms) ; Returns string formatted as "ddd dd.mm.yyyy"
; udfTimeDMYLong (YmdHms) ; Returns string formatted as "dddd dd.mm.yyyy"
;------------------------------------------------------------------------------------------------------------------------------------------
; udfDaysInYear (YmdHms) ; Returns number, range=365..366
; udfDaysInMonth (YmdHms) ; Returns number, range=28..31
; udfGetLastDayOfMonth (sYmdHms) ; Returns datetime string ; The day item is set to the last day of given month.
; udfGetLastDayOfMonth_2 (sYmdHms) ; Returns datetime string ; The day item is set to the last day of given month.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfIsLastDayInMonth (YmdHms) ; Returns boolean, false or true (0..1)
; udfIsFirstDayOfMonth (YmdHms) ; Returns boolean, false or true (0..1)
; udfIsLastDayOfMonth (YmdHms) ; Returns boolean, false or true (0..1)
; udfIsNthDayOfMonth (n, YmdHms) ; Returns boolean, false or true (0..1)
; udfIsWeekDay (YmdHms) ; Returns boolean, false or true (0..1) ; True if day is Monday,Tuesday,Wednesday,Thursday,Friday.
; udfIsWeekendDay (YmdHms) ; Returns boolean, false or true (0..1) ; True if day is Saturday,Sunday.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfGetCountDowInMonth (sYmdHms, iDayOfWeek) ; Returns number, range=1..5 ; uses iDayOfWeek = 0..6 = Sunday..Saturday
; udfGetNthDowInMonth (sYmdHms, iOccurrence, iDayOfWeek) ; Returns datetime string ; uses iDayOfWeek = 0..6 = Sunday..Saturday
;------------------------------------------------------------------------------------------------------------------------------------------
; udfGetWeekDayNext (YmdHms) ; Returns datetime string
; udfGetWeekDayPrev (YmdHms) ; Returns datetime string
;------------------------------------------------------------------------------------------------------------------------------------------
; udfGetSundayOfWeek (YmdHms) ; Returns datetime string ; leaves Hms as is
; udfGetMondayOfWeek (YmdHms) ; Returns datetime string ; leaves Hms as is
; udfGetTuesdayOfWeek (YmdHms) ; Returns datetime string ; leaves Hms as is
; udfGetWednesdayOfWeek (YmdHms) ; Returns datetime string ; leaves Hms as is
; udfGetThursdayOfWeek (YmdHms) ; Returns datetime string ; leaves Hms as is
; udfGetFridayOfWeek (YmdHms) ; Returns datetime string ; leaves Hms as is
; udfGetSaturdayOfWeek (YmdHms) ; Returns datetime string ; leaves Hms as is
;------------------------------------------------------------------------------------------------------------------------------------------
; udfGetYmd (sYmdHms) ; Returns the Ymd date part of the specified sYmdhms.
; udfGetHms (sYmdHms) ; Returns the Hms time part of the specified sYmdhms.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfSetYmd (sYmdHms, sYmd) ; Sets the Ymd date part of the sYmdHms to the specified sYmd date value.
; udfSetHms (sYmdHms, sHms) ; Sets the Hms time part of the sYmdHms to the specified sHms time value.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfGetYear (sYmdHms) ; Returns the number of the year of the specified date.
; udfGetMonth (sYmdHms) ; Returns the number of the month of the specified date.
; udfGetDay (sYmdHms) ; Returns the number of the day of the specified date.
; udfGetHour (sYmdHms) ; Returns the number of the hour of the specified date.
; udfGetMinute (sYmdHms) ; Returns the number of the minute of the specified date.
; udfGetSecond (sYmdHms) ; Returns the number of the second of the specified date.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfSetYear (sYmdHms, iYear) ; Sets the year to the specified value.
; udfSetMonth (sYmdHms, iMonth) ; Sets the month to the specified value.
; udfSetDay (sYmdHms, iDay) ; Sets the day to the specified value.
; udfSetHour (sYmdHms, iHour) ; Sets the hour to the specified value.
; udfSetMinute (sYmdHms, iMinute) ; Sets the minute to the specified value.
; udfSetSecond (sYmdHms, iSecond) ; Sets the second to the specified value.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfSecondsToDhms (iSeconds, iMode) ; Returns numbers for days, hours, minutes, seconds for a given number of seconds.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfYmdHmsToHTTPStamp (sYmdHms, iMode) ; Returns string formatted as (1) "Sun, 06 Nov 1994 08:49:37 GMT" ; RFC 822, updated by RFC 1123
; ; Returns string formatted as (2) "Sunday, 06-Nov-94 08:49:37 GMT" ; RFC 850, obsoleted by RFC 1036
; ; Returns string formatted as (3) "Sun Nov 6 08:49:37 1994" ; ANSI C's asctime() format
; ; Returns string formatted as (4) "1994-11-06T08:49:37" ; ISO 8601 format
; ; Returns string formatted as (5) "19941106T084937" ; ISO 8601 compacted format
;------------------------------------------------------------------------------------------------------------------------------------------
; udfYmdHmsToYwd (sYmdHms, iMode) ; Returns ISO 8601 notation for the week in a formatted string like "yyyyWwwd".
; udfYwdtoYmdHms (sYwd) ; Returns the YmdHms datetime string available from ISO 8601 week notation string.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfRoundToMinute (sYmdHms, iMode) ; Returns datetime string.
; udfRoundToHour (sYmdHms, iMode) ; Returns datetime string.
; udfRoundToDay (sYmdHms, iMode) ; Returns datetime string.
; udfRoundToMonth (sYmdHms, iMode) ; Returns datetime string.
; udfRoundToYear (sYmdHms, iMode) ; Returns datetime string.
; udfRoundToQuarter (sYmdHms, iMode) ; Returns datetime string.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfAgeDifference (sYmdHms1, sYmdHms2, iMode) ; Returns integer number.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfYmdHmsToUnixSeconds (YmdHms) ; Returns number UnixTimeStamp 0..999999999..?
; udfUnixSecondsToYmdHms (Seconds) ; Returns datetime string
;------------------------------------------------------------------------------------------------------------------------------------------
; udfHmsToDecimalHour (Hms) ; Returns decimal number
; udfDecimalHourToYmdHms (fDecHour) ; Returns datetime string
;------------------------------------------------------------------------------------------------------------------------------------------
; udfYmdHmsToFloat (sYmdHms) ; Returns floating point number that represents the DateTime.
; udfFloatToYmdHms (fDateTime) ; Returns datetime string on a given floating point number that represents the DateTime.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfStrDateTo3Char (sYmdHms) ; Returns a three-character string suitable for use as the prefix for a file name.
; udfStrDateTo4Char (sYmdHms) ; Returns a four-character string suitable for use as the prefix for a file name.
; udfStrDateTo8Char (sYmdHms) ; Returns a eight-character string suitable for use as a dos file name.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfCalendar (YmdHms) ; Returns a small calendar table.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfGetSeason (sYmdHms) ; Returns a string containing the name of the season for the given date.
; udfGetZodiac (sYmdHms) ; Returns a string containing the name of the zodiac sign for the given date.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfEasterSunday_Gauss (sYmdHms) ; Returns datetime string.
; udfEasterSunday_Schlyter (sYmdHms) ; Returns datetime string.
; udfEasterSunday_Lilius_Clavius (sYmdHms) ; Returns datetime string.
; udfEasterSunday_Passah (sYmdHms) ; Returns datetime string.
; udfEasterSunday (sYmdHms) ; Returns datetime string.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfGetTimezoneInfo() ; Returns a tab delimited list about Daylight saving and Standard time settings.
;------------------------------------------------------------------------------------------------------------------------------------------
; udfGD_AscherMittwoch (YmdHms) ; Returns datetime string
; udfGD_PalmSonntag (YmdHms) ; Returns datetime string
; udfGD_KarFreitag (YmdHms) ; Returns datetime string
; udfGD_OsterSonntag (YmdHms) ; Returns datetime string
; udfGD_OsterMontag (YmdHms) ; Returns datetime string
; udfGD_WeisserSonntag (YmdHms) ; Returns datetime string
; udfGD_ChristiHimmelfahrt (YmdHms) ; Returns datetime string
; udfGD_PfingstSonntag (YmdHms) ; Returns datetime string
; udfGD_PfingstMontag (YmdHms) ; Returns datetime string
; udfGD_Fronleichnam (YmdHms) ; Returns datetime string
; udfGD_MariaeHimmelfahrt (YmdHms) ; Returns datetime string
; udfGD_TagDerEinheit (YmdHms) ; Returns datetime string
; udfGD_Reformationstag (YmdHms) ; Returns datetime string
; udfGD_HeiligAbend (YmdHms) ; Returns datetime string
; udfGD_ErsterWeihnachten (YmdHms) ; Returns datetime string
; udfGD_ZweiterWeihnachten (YmdHms) ; Returns datetime string
; udfGD_Silvester (YmdHms) ; Returns datetime string
; udfGD_Neujahr (YmdHms) ; Returns datetime string
; udfGD_ErsterAdvent (YmdHms) ; Returns datetime string
; udfGD_ZweiterAdvent (YmdHms) ; Returns datetime string
; udfGD_DritterAdvent (YmdHms) ; Returns datetime string
; udfGD_VierterAdvent (YmdHms) ; Returns datetime string
; udfGD_BussUndBettag (YmdHms) ; Returns datetime string
; udfGD_HeiligeDreiKoenige (YmdHms) ; Returns datetime string
; udfGD_Allerheiligen (YmdHms) ; Returns datetime string
; udfGD_TagDerArbeit (YmdHms) ; Returns datetime string
;------------------------------------------------------------------------------------------------------------------------------------------
; udfNameOfGD (YmdHms) ; Returns string (fast speed)
; udfNameOfGD2 (YmdHms) ; Returns string (slow speed)
; udfGDHashTable (YmdHms, Mode) ; Returns string (middle speed)
; ... Returns string Mode=0 => creates hash table
; ... Returns string Mode=1 => Name of German Holiday
; ... Returns string Mode=2 => List of German Holidays
;==========================================================================================================================================
;==========================================================================================================================================
; User Defined Functions for Date and Time Calculations.
;==========================================================================================================================================
;==========================================================================================================================================
#DefineFunction udfSayNoYes (bool) ; returns string "No" or "Yes" ; for test purposes
NoYesArray = Arrayize("Nein,Ja",",")
;NoYesArray = Arrayize("No,Yes",",")
Return (NoYesArray[bool])
#EndFunction
;==========================================================================================================================================
;==========================================================================================================================================
#DefineFunction udfIsValidDate (sYmdHms) ; returns boolean, false or true (0..1)
ciYmdLen = 10 ; StrLen("0000:00:00")
sYmd = StrSub(sYmdHms,1,ciYmdLen)
If (StrLen(sYmd)!=ciYmdLen) Then Return (@FALSE)
iLastErrorMode = ErrorMode(@OFF)
LastError()
TimeDiffDays(sYmd,sYmd)
ErrorMode(iLastErrorMode)
Return (LastError()==0)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfIsValidDateTime (sYmdHms) ; returns boolean, false or true (0..1)
ciYmdHmsLen = 19 ; StrLen("0000:00:00:00:00:00")
If (StrLen(sYmdHms)!=ciYmdHmsLen) Then Return (@FALSE)
iLastErrorMode = ErrorMode(@OFF)
LastError()
TimeDiff(sYmdHms,sYmdHms)
ErrorMode(iLastErrorMode)
Return (LastError()==0)
#EndFunction
;==========================================================================================================================================
;==========================================================================================================================================
#DefineFunction udfIsLeapYear (YmdHms) ; returns boolean, false or true (0..1)
Year = ItemExtract(1,YmdHms,":")
Return ((0==(year mod 4))&&(0!=(year mod 4000))&&((0!=(year mod 100))||(0==(year mod 400))))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfIsJulianLeapYear (sYmdHms) ; returns boolean, false or true (0..1)
iYear = ItemExtract(1,sYmdHms,":")
Return (TimeJulianDay(StrCat(iYear,":03:01"))-TimeJulianDay(StrCat(iYear,":02:28"))>1)
#EndFunction
;==========================================================================================================================================
;==========================================================================================================================================
#DefineFunction udfJulianDayOfWeek (sYmdHms) ; returns number, range 0..6
Return ((TimeJulianDay(sYmdHms)+5) mod 7) ; Range=0..6 = Sunday..Saturday
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfDayOfWeek (sYmdHms) ; returns number, range 1..7
iJulianDow = (TimeJulianDay(sYmdHms)+5) mod 7
Return (iJulianDow+(7*!iJulianDow)) ; Range=1..7 = Monday..Sunday
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfDayOfYear (sYmdHms) ; returns number, range=1..366
Return (1+TimeDiffDays(sYmdHms,StrCat(ItemExtract(1,sYmdHms,":"),":01:01:00:00:00")))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfWeekOfYear (sYmdHms) ; returns number, range 0..53
iJulianNow = TimeJulianDay(sYmdHms)
iJulianJan4 = TimeJulianDay(StrCat(ItemExtract(1,sYmdHms,":"),":01:04:00:00:00"))
iJulianDowJan4 = (iJulianJan4+5) mod 7 ; Range=0..6 = Sunday..Saturday
iJulianMonday = 1+iJulianJan4-iJulianDowJan4-(7*!iJulianDowJan4)
iWeek = (iJulianNow-iJulianMonday)/7
iWeek = iWeek+(iJulianNow>=iJulianMonday)
Return (iWeek)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
; #DefineFunction udfWeekOfMonth (sYmdHms) ; Returns number, range 1..6.
; Return (udfWeekOfYear(sYmdHms) - udfWeekOfYear(udfSetDay(sYmdHms,1)) + 1)
; #EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfWeekOfMonth (sYmdHms, iMode)
iDay = ItemExtract(3,sYmdHms,":")
iDow = (7 + TimeJulianDay(sYmdHms) - iDay - iMode) mod 7
If !iDow Then iDow = 7
iDay = iDay + iDow - 2
Return (1 + (iDay / 7))
;..........................................................................................................................................
; This function udfWeekOfMonth returns the number of the week within the month
; that is given by the first parameter sYmdHms datetime string.
; This function returns a number in range 1..6.
;
; The second parameter iMode controls whether a week begins with Sunday or Monday.
; iMode = 0 ... Week begins with Sunday.
; iMode = 1 ... Week begins with Monday.
;
; Detlev Dalitz.20030819
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;==========================================================================================================================================
;==========================================================================================================================================
#DefineFunction udfNameOfDay (sYmdHms, iLength) ; Returns string.
sOut = ItemExtract(1+((TimeJulianDay(sYmdHms)+5) mod 7),"Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag",",")
; sOut = ItemExtract(1+((TimeJulianDay(sYmdHms)+5) mod 7),"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",",")
iLength = Max(0,iLength)
If !!iLength Then sOut = StrFix(sOut," ",iLength)
Return (sOut)
; Returns a string with at least iLength number of characters.
; Use iLength=0 for returning the trimmed length of day name as is.
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfNameOfMonth (sYmdHms, iLength) ; Returns string.
sOut = ItemExtract(ItemExtract(2,sYmdHms,":"),"Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember",",")
; sOut = ItemExtract(ItemExtract(2,sYmdHms,":"),"January,February,March,April,May,June,July,August,September,October,November,December",",")
iLength = Max(0,iLength)
If !!iLength Then sOut = StrFix(sOut," ",iLength)
Return (sOut)
; Returns a string with at least iLength number of characters.
; Use iLength=0 for returning the trimmed length of month name as is.
#EndFunction
;==========================================================================================================================================
;==========================================================================================================================================
#DefineFunction udfTimeDMY (YmdHms) ; returns string formatted as "dd.mm.yyyy"
DTArray = Arrayize(YmdHms,":")
Return (StrCat(DTArray[2],".",DTArray[1],".",DTArray[0]))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfTimeDMYShort (YmdHms) ; returns string formatted as "ddd dd.mm.yyyy"
DTArray = Arrayize(YmdHms,":")
Return (StrCat(udfNameOfDay(YmdHms,3)," ",DTArray[2],".",DTArray[1],".",DTArray[0]))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfTimeDMYLong (YmdHms) ; returns string formatted as "dddd dd.mm.yyyy"
DTArray = Arrayize(YmdHms,":")
Return (StrCat(udfNameOfDay(YmdHms,0)," ",DTArray[2],".",DTArray[1],".",DTArray[0]))
#EndFunction
;==========================================================================================================================================
;==========================================================================================================================================
#DefineFunction udfDaysInYear (YmdHms)
Return (udfIsLeapYear(YmdHms) + 365)
; Returns number, range 365..366.
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfDaysInMonth (sYmdHms)
iDaysInMonth = ItemExtract(ItemExtract(2,sYmdHms,":"),"31,28,31,30,31,30,31,31,30,31,30,31",",")
If (iDaysInMonth==28) Then iDaysInMonth = iDaysInMonth+udfIsLeapYear(sYmdHms)
Return (iDaysInMonth)
; Returns number, range=28..31.
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGetLastDayOfMonth (sYmdHms)
Return (ItemReplace(udfDaysInMonth(sYmdHms),3,sYmdHms,":"))
; Returns YmdHms datetime string.
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGetLastDayOfMonth_2 (sYmdHms)
Return (TimeSubtract(ItemReplace(1,3,TimeAdd(sYmdHms,"0:1:0"),":"),"0:0:1"))
; Returns YmdHms datetime string, leaves Hms as is.
; I prefer this version of udfGetLastDayOfMonth.
; LastDayofNextMonth = TimeSubtract(ItemReplace(1,3,TimeAdd(sYmdHms,"0:2:0"),":"),"0:0:1")
#EndFunction
;==========================================================================================================================================
;==========================================================================================================================================
#DefineFunction udfIsLastDayInMonth (YmdHms) ; returns boolean, false or true (0..1)
YmdHmsArray = Arrayize(YmdHms,":")
Return (YmdHmsArray[2]==udfDaysInMonth(YmdHms))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfisfirstdayofmonth",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfisfirstdayofmonth
#DefineFunction udfIsFirstDayOfMonth (sYmdHms)
Return (1==(0+ItemExtract(3,sYmdHms,":")))
#EndFunction
:skip_udfisfirstdayofmonth
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfislastdayofmonth",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfislastdayofmonth
#DefineFunction udfIsLastDayOfMonth (sYmdHms)
Return ((0+ItemExtract(2,sYmdHms,":"))!=(0+ItemExtract(2,TimeAdd(sYmdHms,"0:0:1:0:0:0"),":")))
#EndFunction
:skip_udfislastdayofmonth
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfisnthdayofmonth",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfisnthdayofmonth
#DefineFunction udfIsNthDayOfMonth (n, sYmdHms)
If ((n<1)||(n>31))
Return ((0+ItemExtract(2,sYmdHms,":"))!=(0+ItemExtract(2,TimeAdd(sYmdHms,"0:0:1:0:0:0"),":")))
Else
Return (n==(0+ItemExtract(3,sYmdHms,":")))
EndIf
; to refer to the "last day" of month use any n out of range 1..31, e.g. n=0
#EndFunction
:skip_udfisnthdayofmonth
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfgetcountdowinmonth",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetcountdowinmonth
#DefineFunction udfGetCountDOWInMonth (sYmdHms, iDayOfWeek) ; With iDayOfWeek = 0..6 = Sunday..Saturday.
iDayOfWeek = Min(6,Max(-1,iDayOfWeek)) ; Limit iDayOfWeek to -1..0..6 days. -1 means current DayofWeek of sYmdHms.
If (iDayOfWeek<0) Then iDayOfWeek = ((TimeJulianDay(sYmdHms)+5) mod 7) ; 0..6 = Sunday..Saturday.
iMonth = ItemExtract(2,sYmdHms,":") ; Store iMonth for later check.
sYmdHms = ItemReplace("01",3,sYmdHms,":") ; Set the 01.mm.yyyy of month.
iFirstDay = ((TimeJulianDay(sYmdHms)+5) mod 7) ; Sunday=0
sYmdHms = TimeAdd(sYmdHms,StrCat("0:0:",(7+iDayOfWeek-iFirstDay) mod 7)) ; Add diff. days to the first occurrence.
iCount = 0
While (iMonth==ItemExtract(2,sYmdHms,":"))
iCount = iCount+1
sYmdHms = TimeAdd(sYmdHms,StrCat("0:0:",7)) ; Add weeks.
EndWhile
Return (iCount)
;..........................................................................................................................................
; This Function "udfGetCountDowInMonth" returns the number of times
; the specified day of the week occurs in the month containing the date.
; If you pass a iDayOfWeek value of -1, then the function counts the number of times the day
; indicated by the date parameter occurs within its own month.
;
; Detlev Dalitz.20020720
;..........................................................................................................................................
#EndFunction
:skip_udfgetcountdowinmonth
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfgetnthdowinmonth",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetnthdowinmonth
#DefineFunction udfGetNthDOWInMonth (sYmdHms, iOccurrence, iDayOfWeek)
; With iDayOfWeek = 0..6 ; Sunday..Saturday.
@YM0 = "0:0:0"
@YM7 = "0:0:7"
@YMD = "0:0:D"
@D = "D"
@58 = ":"
iOccurrence = Min(5,Max(1,iOccurrence)) ; Limit to 1..5 weeks.
iDayOfWeek = Min(6,Max(0,iDayOfWeek)) ; Limit to 0..6 days.
iMonth = ItemExtract(2,sYmdHms,@58) ; Save for later check.
sYmdHms = ItemReplace(1,3,sYmdHms,@58) ; Set the 01.mm.yyyy of month.
iFirstDay = ((TimeJulianDay(sYmdHms)+5) mod 7) ; Sunday=0
If ((iOccurrence==1)&&(iDayOfWeek==iFirstDay)) Then Return (TimeAdd(sYmdHms,@YM0)) ; Return if first day of month hits the rule.
sYmdHms = TimeAdd(sYmdHms,StrReplace(@YMD,@D,(7+iDayOfWeek-iFirstDay) mod 7)) ; Add diff. days to the first occurrence.
If (iOccurrence==1) Then Return (sYmdHms) ; Return if this day hits the rule.
sYmdHms = TimeAdd(sYmdHms,StrReplace(@YMD,@D,(7*(iOccurrence-1)))) ; Add diff. weeks to hit the rule.
If (iMonth!=ItemExtract(2,sYmdHms,@58)) Then sYmdHms = TimeSubtract(sYmdHms,@YM7) ; Fallback if necessary and subtract 7 days.
Return (sYmdHms)
;..........................................................................................................................................
; This Function "udfGetNthDowInMonth" returns the Nth occurence of the day of the week
; (for example, the second Tuesday) in the specified month.
; If the Nth day cannot be resolved in this month, then the last occurence of day will be returned.
; (for example : the fifth Thursday in July 2002 does not exist (actually it will be calculated to the 01.08.2002),
; so this function returns the last 'good' Thursday 25.07.2002.
;..........................................................................................................................................
#EndFunction
:skip_udfgetnthdowinmonth
;------------------------------------------------------------------------------------------------------------------------------------------
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfgetweekdaynext",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetweekdaynext
#DefineFunction udfGetWeekDayNext (sYmdHms)
iJulianNow = TimeJulianDay(sYmdHms)
While 1
iJulianNow = iJulianNow+1
iJulianDowNow = (iJulianNow+5) mod 7
If (6!=iJulianDowNow) Then If (0!=iJulianDowNow) Then Break ; if not a weekend day then break
EndWhile
Return (TimeJulToYmd(iJulianNow))
;..........................................................................................................................................
; This Function "udfGetWeekDayNext" returns a DateTime string containing the next WeekDay.
; The date whose following weekday (Monday through Friday) is returned.
; Skips over the Weekend if necessary. No check about holidays which are reside on weekdays.
;
; Detlev Dalitz.20020723
;..........................................................................................................................................
#EndFunction
:skip_udfgetweekdaynext
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfgetweekdayprev",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetweekdayprev
#DefineFunction udfGetWeekDayPrev (sYmdHms)
iJulianNow = TimeJulianDay(sYmdHms)
While 1
iJulianNow = iJulianNow-1
iJulianDowNow = (iJulianNow+5) mod 7
If (6!=iJulianDowNow) Then If (0!=iJulianDowNow) Then Break ; if not a weekend day then break
EndWhile
Return (TimeJulToYmd(iJulianNow))
;..........................................................................................................................................
; This Function "udfGetWeekDayPrev" returns a DateTime string containing the previous WeekDay.
; The date whose previous weekday (Monday through Friday) is returned.
; Skips over the Weekend if necessary. No check about holidays which are reside on weekdays.
;
; Detlev Dalitz.20020723
;..........................................................................................................................................
#EndFunction
:skip_udfgetweekdayprev
;==========================================================================================================================================
;==========================================================================================================================================
#DefineFunction udfGetSundayOfWeek (YmdHms) ; returns datetime string ; leaves Hms untouched
Return (TimeSubtract(YmdHms,StrCat("0:0:",(TimeJulianDay(YmdHms)+5) mod 7)))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGetMondayOfWeek (YmdHms) ; returns datetime string ; leaves Hms untouched
Return (TimeAdd(TimeSubtract(YmdHms,StrCat("0:0:",(TimeJulianDay(YmdHms)+5) mod 7)),"0:0:1"))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGetTuesdayOfWeek (YmdHms) ; returns datetime string ; leaves Hms untouched
Return (TimeAdd(TimeSubtract(YmdHms,StrCat("0:0:",(TimeJulianDay(YmdHms)+5) mod 7)),"0:0:2"))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGetWednesdayOfWeek (YmdHms) ; returns datetime string ; leaves Hms untouched
Return (TimeAdd(TimeSubtract(YmdHms,StrCat("0:0:",(TimeJulianDay(YmdHms)+5) mod 7)),"0:0:3"))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGetThursdayOfWeek (YmdHms) ; returns datetime string ; leaves Hms untouched
Return (TimeAdd(TimeSubtract(YmdHms,StrCat("0:0:",(TimeJulianDay(YmdHms)+5) mod 7)),"0:0:4"))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGetFridayOfWeek (YmdHms) ; returns datetime string ; leaves Hms untouched
Return (TimeAdd(TimeSubtract(YmdHms,StrCat("0:0:",(TimeJulianDay(YmdHms)+5) mod 7)),"0:0:5"))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGetSaturdayOfWeek (YmdHms) ; returns datetime string ; leaves Hms untouched
Return (TimeAdd(TimeSubtract(YmdHms,StrCat("0:0:",(TimeJulianDay(YmdHms)+5) mod 7)),"0:0:6"))
#EndFunction
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfisweekday",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfisweekday
#DefineFunction udfIsWeekDay (YmdHms)
iJulianDow = ((TimeJulianDay(YmdHms)+5) mod 7)
If (6==iJulianDow) Then Return (@FALSE)
If (0==iJulianDow) Then Return (@FALSE)
Return (@TRUE)
; "Is Date A Weekday"
; Returns @True if a date is a weekday such as Monday, Tuesday, Wednesday, Thursday, or Friday.
#EndFunction
:skip_udfisweekday
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfisweekendday",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfisweekendday
#DefineFunction udfIsWeekendDay (YmdHms)
iJulianDow = ((TimeJulianDay(YmdHms)+5) mod 7)
If (6==iJulianDow) Then Return (@TRUE)
If (0==iJulianDow) Then Return (@TRUE)
Return (@FALSE)
; "Is Date A Weekend Day"
; Returns @True if a date is a weekend day such as Saturday or Sunday.
#EndFunction
:skip_udfisweekendday
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfgetymd",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetymd
#DefineFunction udfGetYmd (sYmdHms)
Return (StrSub(sYmdHms,1,10))
; This Function "udfGetYmd" returns the Ymd date part of the specified sYmdhms.
#EndFunction
:skip_udfgetymd
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfgethms",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgethms
#DefineFunction udfGetHms (sYmdHms)
Return (StrSub(sYmdHms,12,-1))
; This Function "udfGetHms" returns the Hms time part of the specified sYmdhms.
#EndFunction
If ItemLocate("udfsetymd",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfsetymd
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfsetymd",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfsetymd
#DefineFunction udfSetYmd (sYmdHms, sYmd)
sYmdHms = ItemReplace(ItemExtract(1,sYmd,":"),1,sYmdHms,":")
sYmdHms = ItemReplace(ItemExtract(2,sYmd,":")-1,2,sYmdHms,":")
sYmdHms = ItemReplace(ItemExtract(3,sYmd,":")-1,3,sYmdHms,":")
Return (TimeAdd("0000:01:01:00:00:00",sYmdHms)) ; make valid datetime string
; This Function "udfSetYmd" sets the Ymd date part of the sYmdHms to the specified sYmd date value.
#EndFunction
:skip_udfsetymd
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfsethms",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfsethms
#DefineFunction udfSetHms (sYmdHms, sHms)
sYmdHms = ItemReplace("00",4,sYmdHms,":")
sYmdHms = ItemReplace("00",5,sYmdHms,":")
sYmdHms = ItemReplace("00",6,sYmdHms,":")
Return (TimeAdd(sYmdHms,StrCat("0:0:0:",sHms))) ; make valid datetime string
; This Function "udfsetHms" sets the Hms time part of the sYmdHms to the specified sHms time value.
#EndFunction
:skip_udfsethms
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfgetyear",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetyear
#DefineFunction udfGetYear (sYmdHms)
Return (ItemExtract(1,sYmdHms,":"))
; This Function "udfGetYear" returns the number of the year of the specified date.
#EndFunction
:skip_udfgetyear
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfgetmonth",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetmonth
#DefineFunction udfGetMonth (sYmdHms)
Return (ItemExtract(2,sYmdHms,":"))
; This Function "udfGetMonth" returns the number of the month of the specified date.
#EndFunction
:skip_udfgetmonth
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfgetday",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetday
#DefineFunction udfGetDay (sYmdHms)
Return (ItemExtract(3,sYmdHms,":"))
; This Function "udfGetDay" returns the number of the day of the specified date.
#EndFunction
:skip_udfgetday
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfgethour",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgethour
#DefineFunction udfGetHour (sYmdHms)
Return (ItemExtract(4,sYmdHms,":"))
; This Function "udfGetHour" returns the number of the hour of the specified date.
#EndFunction
:skip_udfgethour
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfgetminute",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetminute
#DefineFunction udfGetMinute (sYmdHms)
Return (ItemExtract(5,sYmdHms,":"))
; This Function "udfGetMinute" returns the number of the minute of the specified date.
#EndFunction
:skip_udfgetminute
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfgetsecond",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetsecond
#DefineFunction udfGetSecond (sYmdHms)
Return (ItemExtract(6,sYmdHms,":"))
; This Function "udfGetSecond" returns the number of the second of the specified date.
#EndFunction
:skip_udfgetsecond
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfsetyear",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfsetyear
#DefineFunction udfSetYear (sYmdHms, iYear)
Return (TimeAdd(ItemReplace("0000",1,sYmdHms,":"),StrCat(iYear,":0:0:0:0:0"))) ; make valid datetime string
; This Function "udfSetYear" sets the year to the specified value.
#EndFunction
:skip_udfsetyear
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfsetmonth",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfsetmonth
#DefineFunction udfSetMonth (sYmdHms, iMonth)
Return (TimeAdd(ItemReplace("01",2,sYmdHms,":"),StrCat("0:",iMonth-1,":0:0:0:0"))) ; make valid datetime string
; This Function "udfSetMonth" sets the month to the specified value.
#EndFunction
:skip_udfsetmonth
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfsetday",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfsetday
#DefineFunction udfSetDay (sYmdHms, iDay)
Return (TimeAdd(ItemReplace("01",3,sYmdHms,":"),StrCat("0:0:",iDay-1,":0:0:0"))) ; make valid datetime string
; This Function "udfSetDay" sets the day to the specified value.
#EndFunction
:skip_udfsetday
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfsethour",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfsethour
#DefineFunction udfSetHour (sYmdHms, iHour)
Return (TimeAdd(ItemReplace("00",4,sYmdHms,":"),StrCat("0:0:0:",iHour,":0:0"))) ; make valid datetime string
; This Function "udfSetHour" sets the hour to the specified value.
#EndFunction
:skip_udfsethour
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfsetminute",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfsetminute
#DefineFunction udfSetMinute (sYmdHms, iMinute)
Return (TimeAdd(ItemReplace("00",5,sYmdHms,":"),StrCat("0:0:0:0:",iMinute,":0"))) ; make valid datetime string
; This Function "udfSetMinute" sets the minute to the specified value.
#EndFunction
:skip_udfsetminute
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfsetsecond",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfsetsecond
#DefineFunction udfSetSecond (sYmdHms, iSecond)
Return (TimeAdd(ItemReplace("00",6,sYmdHms,":"),StrCat("0:0:0:0:0:",iSecond))) ; make valid datetime string
; This Function "udfSetSecond" sets the second to the specified value.
#EndFunction
:skip_udfsetsecond
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfsecondstodhms",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfsecondstodhms
#DefineFunction udfSecondsToDhms (iSeconds, iMode)
iDays = iSeconds / 86400
iSeconds = iSeconds mod 86400
iHours = iSeconds / 3600
iSeconds = iSeconds mod 3600
iMinutes = iSeconds / 60
iSeconds = iSeconds mod 60
If Min(Max(0,iMode),1) Then Return (StrCat(iDays,@TAB,iHours,@TAB,iMinutes,@TAB,iSeconds))
; English Version.
sOut = "!1 Day!5 !2 Hour!6 !3 Minute!7 !4 Second!8"
sOut = StrReplace(StrReplace(StrReplace(StrReplace(sOut,"!5",StrSub("s",iDays!=1,1)),"!6",StrSub("s",iHours!=1,1)),"!7",StrSub("s",iMinutes!=1,1)),"!8",StrSub("s",iSeconds!=1,1))
sOut = StrReplace(StrReplace(StrReplace(StrReplace(sOut,"!1",iDays),"!2",iHours),"!3",iMinutes),"!4",iSeconds)
Return (sOut)
; ; German Version.
; sOut = "!1 Tag!5 !2 Stunde!6 !3 Minute!7 !4 Sekunde!8"
; sOut = StrReplace(StrReplace(StrReplace(StrReplace(sOut,"!5",StrSub("e",iDays!=1,1)),"!6",StrSub("n",iHours!=1,1)),"!7",StrSub("n",iMinutes!=1,1)),"!8",StrSub("n",iSeconds!=1,1))
; sOut = StrReplace(StrReplace(StrReplace(StrReplace(sOut,"!1",iDays),"!2",iHours),"!3",iMinutes),"!4",iSeconds)
; Return (sOut)
;..........................................................................................................................................
; This Function "udfSecondsToDhms" accepts an integer number of seconds,
; and returns numbers for days, hours, minutes, seconds calculated accordingly.
; Output string can be modified by parameter iMode.
;
; iMode=0 ... Returns a formatted textstring, e.g. "1 Day 2 Hours 1 Minute 4 Seconds".
; iMode=1 ... Returns a tab delimited itemlist, e.g. "1@TAB2@TAB1@TAB4".
;
; Detlev Dalitz.20030110
;..........................................................................................................................................
#EndFunction
:skip_udfsecondstodhms
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfymdhmstohttpstamp",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfymdhmstohttpstamp
#DefineFunction udfYmdHmsToHTTPStamp (sYmdHms, iMode)
iMode = Min(5,Max(1,iMode)) ; Force iMode=1..5.
sYear = ItemExtract(1,sYmdHms,":")
sMonth = ItemExtract(2,sYmdHms,":")
sDay = ItemExtract(3,sYmdHms,":")
sHms = StrSub(sYmdHms,12,8)
sMName = ItemExtract(sMonth,"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",",")
sDName = ItemExtract(1+((TimeJulianDay(sYmdHms)+5) mod 7),"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",",")
Select iMode
Case 1
sHTTPStamp = StrCat(StrSub(sDName,1,3),', ',sDay,' ',sMName,' ',sYear,' ',sHms,' GMT')
Break
Case 2
sHTTPStamp = StrCat(sDName,', ',sDay,'-',sMName,'-',StrSub(sYear,3,2),' ',sHms,' GMT')
Break
Case 3
sHTTPStamp = StrCat(StrSub(sDName,1,3),' ',sMName,' ',StrFixLeft(0+sDay,' ',2),' ',sHms,' ',sYear)
Break
Case 4
sHTTPStamp = StrCat(sYear,'-',sMonth,'-',sDay,'T',sHms)
Break
Case 5
sHTTPStamp = StrCat(sYear,sMonth,sDay,'T',StrReplace(sHms,":",""))
Break
EndSelect
Return (sHTTPStamp)
;..........................................................................................................................................
; This function udfYmdHmsToHTTP (sYmdHms, iMode) returns a string representation of date/time stamps for HTTP applications.
;
; iMode=1 : "Sun, 06 Nov 1994 08:49:37 GMT" ; RFC 822, updated by RFC 1123
; iMode=2 : "Sunday, 06-Nov-94 08:49:37 GMT" ; RFC 850, obsoleted by RFC 1036
; iMode=3 : "Sun Nov 6 08:49:37 1994" ; ANSI C's asctime() format
; iMode=4 : "1994-11-06T08:49:37" ; ISO 8601 (European Standard EN 28601) (see altered German standard DIN 5008)
; iMode=5 : "19941106T084937" ; ISO 8601 compacted
;
; The first format is preferred as an Internet standard and
; represents a fixed-length subset of that defined by RFC 1123 (an update to RFC 822).
; The second format is in common use, but is based on the obsolete RFC 850 date format and lacks a four-digit year.
;
; HTTP/1.1 clients and servers that parse the date value MUST accept
; all three formats (iMode=1..3) (for compatibility with HTTP/1.0), though they MUST
; only generate the RFC 1123 (iMode=1) format for representing HTTP-date values in header fields.
;
; All HTTP date/time stamps MUST be represented in Greenwich Mean Time (GMT) without exception.
; For the purposes of HTTP, GMT is exactly equal to UTC (Coordinated Universal Time).
; This is indicated in the first two formats by the inclusion of "GMT"
; as the three-letter abbreviation for time zone, and MUST be assumed when reading the asctime format.
; HTTP-date is case sensitive and MUST NOT include additional linear white spaces.
;
;..........................................................................................................................................
#EndFunction
:skip_udfymdhmstohttpstamp
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfymdhmstoywd",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfymdhmstoywd
#DefineFunction udfYmdHmsToYwd (sYmdHms, iMode)
iJulianNow = TimeJulianDay(sYmdHms)
iJulianDowNow = (iJulianNow + 5) mod 7 ; Number of the day. Range=0..6 = Sunday..Saturday.
If !iJulianDowNow Then iJulianDowNow = 7 ; Make the Julian Sunday the last day in a Calendar week.
iJulian = iJulianNow - iJulianDowNow
iJulianMon = iJulian + 1 ; Monday begins the Calendar week.
sYmdHmsMon = TimeJulToYmd(iJulianMon)
sYearMon = ItemExtract(1,sYmdHmsMon,":")
sYwd = sYearMon
sYmdHmsWeek = sYmdHmsMon
iMonth = Int(ItemExtract(2,sYmdHms,":"))
If ((iMonth==12)||(iMonth==1))
iDay = Int(ItemExtract(3,sYmdHms,":"))
If ((iDay>25)||(iDay<7))
iJulianSun = iJulian + 7 ; Sunday ends the Calendar week.
sYmdHmsSun = TimeJulToYmd(iJulianSun)
sYearSun = ItemExtract(1,sYmdHmsSun,":")
If (sYearSun>sYearMon)
iJulianJan4 = TimeJulianDay(StrCat(sYearSun,":01:04:00:00:00"))
iJulianDowJan4 = (iJulianJan4 + 5) mod 7 ; Number of the day. Range=0..6 = Sunday..Saturday.
If !iJulianDowJan4 Then iJulianDowJan4 = 7 ; Make the Julian Sunday the last day in a Calendar week.
If (iJulianDowJan4>3)
sYwd = sYearSun
sYmdHmsWeek = sYmdHmsSun
EndIf
EndIf
EndIf
EndIf
sYwd = StrCat(sYwd,"W",StrFixLeft(udfWeekOfYear(sYmdHmsWeek),"0",2))
If Min(1,Max(0,iMode)) Then sYwd = StrCat(sYwd,iJulianDowNow)
Return (sYwd)
;..........................................................................................................................................
; This Function "udfYmdHmsToYwd" returns ISO 8601 standard notation
; for the given YmdHms datetime string in a formatted string like "yyyyWwwd".
; For example, the first week of the year 1997 lasts from 1996-12-30 to 1997-01-05 and
; can be written in standard notation as "1997W01",
; and "1996:12:31" becomes "1997W012".
; iMode=0 ... Format "yyyyWww"
; iMode=1 ... Format "yyyyWwwd" ; appends the calendarian number of the day of the week, with d=1..7 = Monday..Sunday.
;
; Detlev Dalitz.20030820
;..........................................................................................................................................
#EndFunction
:skip_udfymdhmstoywd
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfywdtoymdhms",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfywdtoymdhms
#DefineFunction udfYwdtoYmdHms (sYwd)
iJulianJan4 = TimeJulianDay(StrCat(StrSub(sYwd,1,4),":01:04:00:00:00"))
iJulianDay = (iJulianJan4-((iJulianJan4 + 5) mod 7)) + (7*(StrSub(sYwd,6,2)-1)) + Max(1,StrCat("0",StrSub(sYwd,8,1)))
Return (TimeJulToYmd(iJulianDay))
;..........................................................................................................................................
; This Function "udfYwdToYmdHms" returns the ymdHms DateTime string available from the given Ywd YearWeekDay string.
; Input string sYwd can be formatted as "yyyyWwwd" or "yyyyWww".
; If the day number is ommitted, then this udf returns the Monday of the given week.
;
; Note: The String sYwd is not checked about valid content.
; The YearWeek string "2001W53" may be logical invalid but will be calculated to "2001:12:31:00:00:00" Monday.
; The YearWeekDay string "2001W537" may be logical invalid but will be calculated to "2002:01:06:00:00:00" Sunday.
;
; Detlev Dalitz.20020722
;..........................................................................................................................................
#EndFunction
:skip_udfywdtoymdhms
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfroundtominute",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfroundtominute
#DefineFunction udfRoundToMinute (sYmdHms, iMode)
If !Min(1,Max(0,iMode))
sYmdHms = TimeAdd(sYmdHms,StrCat("0:0:0:0:",(ItemExtract(6,sYmdHms,":")>29),":0"))
EndIf
sYmdHms = StrCat(StrSub(sYmdHms,1,17),"00")
Return (sYmdHms)
;..........................................................................................................................................
; This Function "udfRoundToMinute" returns a DateTime string.
; iMode=0 ... Round up or Down.
; iMode=1 ... Truncate to floor minute.
;..........................................................................................................................................
#EndFunction
:skip_udfroundtominute
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfroundtohour",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfroundtohour
#DefineFunction udfRoundToHour (sYmdHms, iMode)
If !Min(1,Max(0,iMode))
sYmdHms = TimeAdd(sYmdHms,StrCat("0:0:0:",(ItemExtract(5,sYmdHms,":")>29),":0:0"))
EndIf
sYmdHms = StrCat(StrSub(sYmdHms,1,14),"00:00")
Return (sYmdHms)
; This Function "udfRoundToHour" returns a DateTime string.
; iMode=0 ... Round up or Down.
; iMode=1 ... Truncate to floor hour.
;
#EndFunction
:skip_udfroundtohour
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfroundtoday",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfroundtoday
#DefineFunction udfRoundToDay (sYmdHms, iMode)
If !Min(1,Max(0,iMode))
sYmdHms = TimeAdd(sYmdHms,StrCat("0:0:",(ItemExtract(4,sYmdHms,":")>11),":0:0:0"))
EndIf
sYmdHms = StrCat(StrSub(sYmdHms,1,11),"00:00:00")
Return (sYmdHms)
;..........................................................................................................................................
; This Function "udfRoundToDay" returns a DateTime string.
; iMode=0 ... Round up or Down.
; iMode=1 ... Truncate to floor day.
;..........................................................................................................................................
#EndFunction
:skip_udfroundtoday
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfroundtomonth",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfroundtomonth
#DefineFunction udfRoundToMonth (sYmdHms, iMode)
If !Min(1,Max(0,iMode))
sYmdHms = TimeAdd(sYmdHms,StrCat("0:",(ItemExtract(3,sYmdHms,":")>15),":0:0:0:0"))
EndIf
sYmdHms = StrCat(StrSub(sYmdHms,1,8),"01:00:00:00")
Return (sYmdHms)
;..........................................................................................................................................
; This Function "udfRoundToMonth" returns a DateTime string.
; iMode=0 ... Round up or Down.
; iMode=1 ... Truncate to floor month.
;..........................................................................................................................................
#EndFunction
:skip_udfroundtomonth
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfroundtoyear",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfroundtoyear
#DefineFunction udfRoundToYear (sYmdHms, iMode)
If !Min(1,Max(0,iMode))
sYmdHms = TimeAdd(sYmdHms,StrCat((ItemExtract(2,sYmdHms,":")>6),":0:0:0:0:0"))
EndIf
sYmdHms = StrCat(StrSub(sYmdHms,1,5),"01:01:00:00:00")
Return (sYmdHms)
;..........................................................................................................................................
; This Function "udfRoundToYear" returns a DateTime string.
; iMode=0 ... Round up or Down.
; iMode=1 ... Truncate to floor year.
;..........................................................................................................................................
#EndFunction
:skip_udfroundtoyear
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfroundtoquarter",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfroundtoquarter
#DefineFunction udfRoundToQuarter (sYmdHms, iMode)
Mode = Min(1,Max(0,iMode))
sYear = ItemExtract(1,sYmdHms,":")
Select (ItemExtract(2,sYmdHms,":")/3)
Case 0
iMonth = 1
If !Mode Then If (sYmdHms>StrCat(sYear,":02:14:00:00:00")) Then iMonth = 4
Break
Case 1
iMonth = 4
If !Mode Then If (sYmdHms>StrCat(sYear,":05:15:00:00:00")) Then iMonth = 7
Break
Case 2
iMonth = 7
If !Mode Then If (sYmdHms>StrCat(sYear,":08:15:00:00:00")) Then iMonth = 10
Break
Case 3
iMonth = 10
If !Mode Then If (sYmdHms>StrCat(sYear,":11:15:00:00:00")) Then iMonth = 13
Break
EndSelect
sYmdHms = ItemReplace("01",2,sYmdHms,":")
sYmdHms = TimeAdd(sYmdHms,StrCat("0:",iMonth-1,":0:0:0:0"))
sYmdHms = StrCat(StrSub(sYmdHms,1,8),"01:00:00:00")
Return (sYmdHms)
;..........................................................................................................................................
; This Function "udfRoundToQuarter" returns a DateTime string.
; iMode=0 ... Round up or Down.
; iMode=1 ... Truncate to floor quarter.
;..........................................................................................................................................
#EndFunction
:skip_udfroundtoquarter
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfagedifference",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfagedifference
#DefineFunction udfAgeDifference (sYmdHms1, sYmdHms2, iMode) ; returns integer number
If !Min(1,Max(0,iMode))
sYmdHms1 = StrCat(StrSub(sYmdHms1,1,10),":00:00:00")
sYmdHms2 = StrCat(StrSub(sYmdHms2,1,10),":00:00:00")
EndIf
If (sYmdHms1>sYmdhms2)
sYmdHms = TimeDiff(sYmdHms1,sYmdhms2)
Else
sYmdHms = TimeDiff(sYmdHms2,sYmdhms1)
EndIf
Return (0+ItemExtract(1,sYmdHms,":"))
;..........................................................................................................................................
; Returns the difference in years between the two dates sYmdHms1 and sYmdHms2.
; iMode=0 ... The time part of the DateTime is ommitted resp. forced to "00:00:00".
; iMode=1 ... The time part of the DateTime strings is considered within the calculation.
;
; Detlev Dalitz.20020723
;..........................................................................................................................................
#EndFunction
:skip_udfagedifference
;==========================================================================================================================================
;==========================================================================================================================================
#DefineFunction udfYmdHmsToUnixSeconds (YmdHms) ; returns number UnixTimeStamp
Return (TimeDiffSecs(YmdHms,"1970:01:01:00:00:00"))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfUnixSecondsToYmdHms (Seconds) ; returns datetime string
Return (TimeAdd("1970:01:01:00:00:00",StrCat("0:0:0:0:0:",Seconds)))
; Note: Unix Time cannot go past 68 years from 1970 (2038).
#EndFunction
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfhmstodecimalhour",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfhmstodecimalhour
#DefineFunction udfHmsToDecimalHour (Hms)
iCount = ItemCount(Hms,":")
If (iCount<3) Then Return (0)
iSeconds = ItemExtract(iCount ,Hms,":")
iMinutes = ItemExtract(iCount-1,Hms,":")
iHours = ItemExtract(iCount-2,Hms,":")
Return (iHours + (iMinutes/60.0) + (iSeconds/3600.0))
;..........................................................................................................................................
; This Function "udfHmsToDecimal" converts a Hms string
; into a decimal number of hours, e.g. from "12:56:34" to 12.942778.
; Note: Hms must be a ItemList of at least three Items, e.g. "123:45:34",
; representing "Hours:Minutes:Seconds", otherwise the udf returns zero.
; It is possible to feed a YmdHms datetime string as input parameter.
; Only the last three Items Hours, Minutes, Seconds will be extracted.
; Note: iHours, iMinutes, iSeconds must be evaluated to integer numbers. No special validation here.
;..........................................................................................................................................
#EndFunction
:skip_udfhmstodecimalhour
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfdecimalhourtoymdhms",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfdecimalhourtoymdhms
#DefineFunction udfDecimalHourToYmdHms (fDecHour)
Return (TimeDiff(TimeAdd("1900:01:01",StrCat("0:0:0:0:0:",Int(fDecHour*3600))),"1900:1:1"))
;..........................................................................................................................................
; This Function "udfDecimalHourToYmdHms" converts a decimal number of hours
; into a YmdHms datetime string representing a time range of
; Years, Months, Days, Hours, Minutes, and Seconds,
; e.g. from 12.942778 to "0000:00:00:12:56:34",
; e.g. from 125.084167 to "0000:00:05:05:05:03".
;..........................................................................................................................................
#EndFunction
:skip_udfdecimalhourtoymdhms
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfymdhmstofloat",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfymdhmstofloat
#DefineFunction udfYmdHmsToFloat (sYmdHms)
sYmdHms = TimeAdd(sYmdHms,"0:0:0:0:0:0") ; make valid datetime string
iDayAdjust=693960
iSecondsPerDay=86400
iDay=TimeJulianDay(sYmdHms)
iDay=iDay-iDayAdjust
ihh=ItemExtract(4,sYmdHms,":")
imm=ItemExtract(5,sYmdHms,":")
iss=ItemExtract(6,sYmdHms,":")
iSeconds=3600*ihh + 60*imm + iss
fFraction=1.0*iSeconds/iSecondsPerDay
fDateTime=iDay+fFraction
Return (fDateTime)
;..........................................................................................................................................
; This Function "udfYmdHmsToFloat" returns a number in float format
; that represents the timepoint given by a YmdHms DateTime string.
; This float number is compatible with the double number that is created by
; the Microsoft Windows system function "SystemTimeToVariantTime".
; It is the default Win32 time/date data format supported by Windows NT and Windows 95.
;
; Examples:
; "1899:12:29:00:00:00" --> -1.0
; "1899:12:30:00:00:00" --> 0.0
; "1899:12:31:00:00:00" --> 1.0
; "1900:01:01:00:00:00" --> 2.0
; "1900:01:02:00:00:01" --> 3.00001157407407
; "1900:01:03:00:00:02" --> 4.00002314814815
; "2003:06:20:07:20:00" --> 37792.305555555556
;
;
; Detlev Dalitz.20030620
; based on request by "Beat beat.riederer@dbs.ch, Thursday, June 19, 2003 07:53 AM"
; answered by "Marty marty+bbs@winbatch.com, Thursday, June 19, 2003 11:16 PM"
;..........................................................................................................................................
#EndFunction
:skip_udfymdhmstofloat
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udffloattoymdhms",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udffloattoymdhms
#DefineFunction udfFloatToYmdHms (fDateTime)
iDayAdjust=693960
iSecondsPerDay=86400
iDay=Int(Floor(fDateTime))
fFraction=fDateTime-iDay
iDay=iDay+iDayAdjust
iSeconds=Int(fFraction*iSecondsPerDay)
sYmdHms=TimeJulToYmd(iDay)
sYmdHms=TimeAdd(sYmdHms,StrCat("0:0:0:0:0:",iSeconds)) ; make valid datetime string
Return (sYmdHms)
;..........................................................................................................................................
; This Function "udfFloatToYmdHms" returns a DateTime string
; that represents the Datetime given by a float number.
; The float number has to be compatible with the double number that is created by
; the Microsoft Windows system function "SystemTimeToVariantTime".
; It is the default Win32 time/date data format supported by Windows NT and Windows 95.
;
; Examples:
; -1.0 --> "1899:12:29:00:00:00"
; 0.0 --> "1899:12:30:00:00:00"
; 1.0 --> "1899:12:31:00:00:00"
; 2.0 --> "1900:01:01:00:00:00"
; 3.00001157407407 --> "1900:01:02:00:00:01"
; 4.00002314814815 --> "1900:01:03:00:00:02"
; 37792.305555555556 --> "2003:06:20:07:19:55" ; should be "2003:06:20:07:20:00"
; There seems to be some WinBatch related number rounding problem on the seconds fraction part.
;
; Detlev Dalitz.20030620.20031020.
;..........................................................................................................................................
#EndFunction
:skip_udffloattoymdhms
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfstrdateto3char",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrdateto3char
#DefineFunction udfStrDateTo3Char (sYmdHms)
Return (StrCat(StrSub(ItemExtract(1,sYmdHms,":"),4,1),Num2Char(64+ItemExtract(2,sYmdHms,":")),Num2Char((ItemExtract(3,sYmdHms,":")&31)+48+7*((ItemExtract(3,sYmdHms,":")&31)>9))))
;..........................................................................................................................................
; "Date To Three Character String"
; This Function "udfStrDateTo3Char" converts the date portion of a datetime string into a three-character string.
; The resolution is one day. The range is one decade.
; This string is suitable for use as the prefix for a file name.
;
; The return value is composed of:
; 1) the last digit of the year (0..9)
; 2) the month represented by a letter (A..L)
; 3) the day represented by an alphanumeric (1..9, A..V), that is (1..9, 10..31)
;
; Note: No validation of input sYmdHms here. sYmdHms must contain a valid date.
;..........................................................................................................................................
#EndFunction
:skip_udfstrdateto3char
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrdateto4char",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrdateto4char
#DefineFunction udfStrDateTo4Char (sYmdHms)
Return (StrCat(StrSub(ItemExtract(1,sYmdHms,":"),4,1),Num2Char(64+ItemExtract(2,sYmdHms,":")),ItemExtract(3,sYmdHms,":")))
;..........................................................................................................................................
; "Date To Four Character String"
; This Function "udfStrDateTo4Char" converts the date portion of a datetime string into a four-character string.
; The resolution is one day. The range is one decade.
; This string is suitable for use as the prefix for a file name.
;
; The return value is composed of:
; 1) the last digit of the year (0..9)
; 2) the month represented by a letter (A..L)
; 3) the day (01..31)
;
; Note: No validation of input sYmdHms here. sYmdHms must contain a valid date.
;..........................................................................................................................................
#EndFunction
:skip_udfstrdateto4char
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrdateto8char",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrdateto8char
#DefineFunction udfStrDateTo8Char (sYmdHms)
Return (StrCat(StrSub(ItemExtract(1,sYmdHms,":"),4,1),Num2Char(64+ItemExtract(2,sYmdHms,":")),ItemExtract(3,sYmdHms,":"),ItemExtract(4,sYmdHms,":"),ItemExtract(5,sYmdHms,":")))
;..........................................................................................................................................
; "Date And Time To Eight Character String"
; This Function "udfStrDateTo8Char" converts a datetime string into an eight-character string
; that can be used as a (DOS short) file name.
; The range is one decade. The resolution is one minute.
;
; The return value is composed of:
; 1) the last digit of the year (0..9)
; 2) the month represented by a letter (A..L)
; 3) the day (01..31)
; 4) the hour (00..23)
; 5) the minutes (00..59)
;
; Note: No validation of input sYmdHms here. sYmdHms must contain a valid date.
;..........................................................................................................................................
#EndFunction
:skip_udfstrdateto8char
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfcalendar",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfcalendar
#DefineFunction udfCalendar (sYmdHms)
iDayWidthMax = 3 ; Default=Minimum=3; Maybe enlarge this value to spread the table in horizontal direction.
iDayMax = 7
iWeekWidthMax = 3
iLineMax = (iDayMax*iDayWidthMax)+iWeekWidthMax+StrLen(@CRLF)
iRowMax = 8
iCalSizeMax = iLineMax*iRowMax
iOffsCrLf = iLineMax-2
iOffsYear = (iDayMax*iDayWidthMax)-1
iOffsMonth = 0
iOffsWeek = 1+iOffsYear+iLineMax+iLineMax
iOffsDayNames = iLineMax
iOffsDayTab = iOffsDayNames+iLineMax
sMonthNameList = "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember"
sDayNameList = "Mo,Di,Mi,Do,Fr,Sa,So"
;sMonthNameList = "January,February,March,April,May,June,July,August,September,October,November,December"
;sDayNameList = "Mo,Tu,We,Th,Fr,Sa,Su"
iYear = 0+ItemExtract(1,sYmdHms,":")
iMonth = 0+ItemExtract(2,sYmdHms,":")
sMonthName = ItemExtract(iMonth,sMonthNameList,",")
hbbCal = BinaryAlloc(iCalSizeMax)
BinaryEodSet(hbbCal,iCalSizeMax)
BinaryReplace(hbbCal,""," ",@TRUE)
While (iOffsCrLf<iCalSizeMax)
BinaryPokeStr(hbbCal,iOffsCrLf,@CRLF)
iOffsCrLf = iOffsCrLf+iLineMax
EndWhile
For iCol=1 To iDayMax
BinaryPokeStr(hbbCal,iOffsDayNames,ItemExtract(iCol,sDayNameList,","))
iOffsDayNames = iOffsDayNames+iDayWidthMax
Next
BinaryPokeStr(hbbCal,iOffsYear,iYear)
BinaryPokeStr(hbbCal,iOffsMonth,sMonthName)
sYmdHms = ItemReplace("01",3,sYmdHms,":")
iDow01 = (TimeJulianDay(sYmdHms)+5) mod 7 ; with 0..6 = Sunday..Saturday
If !iDow01 Then iDow01 = 7
sMonday = TimeAdd(TimeSubtract(sYmdHms,StrCat("0:0:",iDow01)),"0:0:1")
sYmdHms = sMonday
iOffsRow = iOffsDayTab
iOffsCol = iOffsRow
iDay = 0
sWeek = ""
While 1
For iCol=1 To iDayMax
iMonthWork = 0+ItemExtract(2,sYmdHms,":")
If (iMonth==iMonthWork)
iDay = iDay+1
BinaryPokeStr(hbbCal,iOffsCol,StrFixLeft(iDay," ",2))
If (sWeek=="")
sWeek = StrCat("W",StrFixLeft(udfWeekOfYear(sYmdHms),"0",2))
BinaryPokeStr(hbbCal,iOffsWeek,sWeek)
EndIf
EndIf
iOffsCol = iOffsCol + iDayWidthMax
sYmdHms = TimeAdd(sYmdHms,StrCat("0:0:1"))
Next
iYearWork = 0+ItemExtract(1,sYmdHms,":")
If (iYear<iYearWork) Then Break
iMonthWork = 0+ItemExtract(2,sYmdHms,":")
If (iMonth<iMonthWork) Then Break
iOffsRow = iOffsRow+iLineMax
iOffsCol = iOffsRow
iOffsWeek = iOffsWeek+iLineMax
sWeek = ""
EndWhile
sCal = BinaryPeekStr(hbbCal,0,iCalSizeMax)
BinaryFree(hbbCal)
Return (sCal)
;..........................................................................................................................................
; This Function "udfCalendar" returns a small calender table for the given year and month.
;
; +------------------------+
; |Januar 2003|
; |Mo Di Mi Do Fr Sa So |
; | 1 2 3 4 5 W01|
; | 6 7 8 9 10 11 12 W02|
; |13 14 15 16 17 18 19 W03|
; |20 21 22 23 24 25 26 W04|
; |27 28 29 30 31 W05|
; | |
; +------------------------+
;
; Detlev Dalitz.20020721
;..........................................................................................................................................
#EndFunction
:skip_udfcalendar
;==========================================================================================================================================
;==========================================================================================================================================
If ItemLocate("udfgetseason",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetseason
#DefineFunction udfGetSeason (sYmdHms)
sDateList = "03:21,06:22,09:23,12:22"
sSeasonList = "Winter,Frühling,Sommer,Herbst"
;sSeasonList = "Winter,Spring,Summer,Fall"
iSeasonMax = 4
sYmdHms = StrSub(sYmdHms,6,-1)
iSeason = !(sYmdHms<StrCat(ItemExtract(iSeasonMax,sDateList,","),":00:00:00"))
If !iSeason
For iSeason=1 To iSeasonMax
If (sYmdHms<StrCat(ItemExtract(iSeason,sDateList,","),":00:00:00")) Then Break
Next
EndIf
Return (ItemExtract(iSeason,sSeasonList,","))
;..........................................................................................................................................
; "Date To Season Name"
; This Function "udfGetSeason" returns the name of the Season for the given date.
;..........................................................................................................................................
#EndFunction
:skip_udfgetSeason
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfgetzodiac",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfgetzodiac
#DefineFunction udfGetZodiac (sYmdHms)
sDateList = "01:21,02:20,03:21,04:21,05:22,06:22,07:24,08:24,09:24,10:24,11:23,12:22"
sZodiacList = "Steinbock,Wassermann,Fische,Widder,Stier,Zwillinge,Krebs,Löwe,Jungfrau,Waage,Skorpion,Schütze"
;sZodiacList = "Capricorn,Aquarius,Pisces,Aries,Taurus,Gemeni,Cancer,Leo,Virgo,Libra,Scorpio,Sagittarius"
iZodiacMax = 12
sYmdHms = StrSub(sYmdHms,6,-1)
iZodiac = !(sYmdHms<StrCat(ItemExtract(iZodiacMax,sDateList,","),":00:00:00"))
If !iZodiac
For iZodiac=1 To iZodiacMax
If (sYmdHms<StrCat(ItemExtract(iZodiac,sDateList,","),":00:00:00")) Then Break
Next
EndIf
Return (ItemExtract(iZodiac,sZodiacList,","))
;..........................................................................................................................................
; "Date To Zodiac Name"
; This Function "udfGetZodiac" returns the name of the Zodiac sign for the given date.
;..........................................................................................................................................
#EndFunction
:skip_udfgetzodiac
;==========================================================================================================================================
;==========================================================================================================================================
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfEasterSunday_Gauss (sYmdHms) ; Returns DateTime string.
iYear = +ItemExtract(1,sYmdHms,":")
If (iYear<1900) Then Return ""
If (iYear>2099) Then Return ""
a = iYear mod 19
b = iYear mod 4
c = iYear mod 7
d = (19*a + 24) mod 30
e = (2*b + 4*c + 6*d + 5) mod 7
iDay = d + e + 22 ; = 22.03.yyyy + d + e
iMonth = 3
If (iDay<1)||(iDay>31)
iMonth = 4
iDay = d + e - 9 ; April.
If (iDay==26) Then Day = 19
If (iDay==25)
If (d==28)
If (e==6)
If (a>10) Then iDay = 18
EndIf
EndIf
EndIf
EndIf
Return (TimeAdd(StrCat(iYear,":",iMonth,":",iDay),"0:0:0")) ; Return normalized valid datetime string.
;..........................................................................................................................................
; Algorithm by Carl Friedrich Gauss (1777 - 1855) (* valid years = 1900..2099 *)
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfEasterSunday_Schlyter (sYmdHms) ; Returns DateTime string.
iYear = +ItemExtract(1,sYmdHms,":")
a = iYear mod 19
b = iYear / 100
c = iYear mod 100
d = b / 4
e = b mod 4
f = (b + 8) / 25
g = (b - f + 1) / 3
h = (19*a + b - d - g + 15) mod 30
i = c / 4
k = c mod 4
l = (32 + 2*e + 2*i - h - k) mod 7
m = (a + 11*h + 22*l) / 451
n = (h + l - 7*m + 22) - 1
;n = (h + l - 7*m + 22) - 1
Return (TimeAdd(StrCat(iYear,":3:1"),StrCat("0:0:",n))) ; Return normalized valid datetime string.
;..........................................................................................................................................
; Dieser Algorithmus basiert nicht auf der Berechnung von Gauss und
; kommt ohne Ausnahmen aus (lt. Paul Schlyter).
; Werte ueber 31 bezeichnen den Tag im April-31,
; Werte darunter bezeichnen den Tag im Maerz.
; Note: Is Year>2568 invalid?
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfEasterSunday_Lilius_Clavius (sYmdHms) ; Returns DateTime string.
iYear = +ItemExtract(1,sYmdHms,":")
iGoldenNo = (iYear mod 19) + 1
iCentury = (iYear / 100) + 1
iLeapCent = (3 * iCentury / 4) - 12
iLunarCorr = ((8 * iCentury + 5) / 25) - 5
iSun = (5 * iYear / 4) - iLeapCent - 10
iEpact = Abs(11 * iGoldenNo + 20 + iLunarCorr - iLeapCent) mod 30
If (((iEpact == 25) && (iGoldenNo > 11)) || (iEpact == 24)) Then iEpact = iEpact + 1
iFullMoon = 44 - iEpact
If (iFullMoon < 21) Then iFullMoon = iFullMoon + 30
iDay = iFullMoon + 7 - ((iSun + iFullMoon) mod 7)
If (iDay > 31)
iDay = iDay - 31
iMonth = 4
Else
iMonth = 3
EndIf
Return (TimeAdd(StrCat(iYear,":",iMonth,":",iDay),"0:0:0")) ; Return normalized valid datetime string.
;..........................................................................................................................................
; Find Easter Sunday for a Given Year.
; Algorithm by Lilius & Clavius (16th Century)
; Donald Knuth - Art of Computer Programming 1.3.2 ex 14 (2nd set)
; Note: Is Year>2568 invalid?
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfEasterSunday_Passah (sYmdHms) ; Returns DateTime string.
aPassah = Arrayize("04:14,04:03,03:23,04:11,03:31,04:18,04:08,03:28,04:16,04:05,03:25,04:13,04:02,03:22,04:10,03:30,04:17,04:07,03:27",",")
iYear = ItemExtract(1,sYmdHms,":")
sYmd = StrCat(iYear,":",aPassah[iYear mod 19])
Return (TimeAdd(sYmd,StrCat("0:0:",7-((TimeJulianDay(sYmd)+5) mod 7)))) ; Return normalized valid datetime string.
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
; Dispatcher for testing.
#DefineFunction udfEasterSunday (YmdHms) ; Returns DateTime string.
; Return (udfEasterSunday_Gauss(YmdHms))
; Return (udfEasterSunday_Schlyter(YmdHms))
; Return (udfEasterSunday_Lilius_Clavius(YmdHms))
Return (udfEasterSunday_Passah(YmdHms))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;==========================================================================================================================================
;==========================================================================================================================================
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGetTimezoneInfo()
TIME_ZONE_ID_INVALID = -1
TIME_ZONE_ID_UNKNOWN = 0
TIME_ZONE_ID_STANDARD = 1
TIME_ZONE_ID_DAYLIGHT = 2
@0 = ""
@58 = ":"
@000 = "0:0:0"
sResult = @0
sStandardDate = @0
iStandardBias = @0
sStandardName = @0
sDaylightDate = @0
iDaylightBias = @0
sDaylightName = @0
iCurrentBias = @0
iYearNow = ItemExtract(1,TimeYmdHms(),@58)
hBB = BinaryAlloc(172) ; Buffer for TIME_ZONE_INFORMATION structure.
BinaryEodSet(hBB,172)
iResult = DllCall(StrCat(DirWindows(1),"Kernel32.dll"),long:"GetTimeZoneInformation",lpbinary:hBB)
sResult = StrCat(iResult,StrFill(@TAB,7))
Switch iResult
Case TIME_ZONE_ID_INVALID
Case TIME_ZONE_ID_UNKNOWN
Break
Case TIME_ZONE_ID_DAYLIGHT
Case TIME_ZONE_ID_STANDARD
iCurrentBias = BinaryPeek4(hBB,0)
iMonth = BinaryPeek2(hBB,70)
If (iMonth>0)
iWeekDay = BinaryPeek2(hBB,72)
iOccurrence = BinaryPeek2(hBB,74)
iHour = BinaryPeek2(hBB,76)
sStandardDate = TimeAdd(ItemReplace(iHour,4,udfGetNthDOWInMonth(StrCat(iYearNow,@58,iMonth,@58,1),iOccurrence,iWeekDay),@58),@000)
iStandardBias = BinaryPeek4(hBB,84)
EndIf
iMonth = BinaryPeek2(hBB,154)
If (iMonth>0)
iWeekDay = BinaryPeek2(hBB,156)
iOccurrence = BinaryPeek2(hBB,158)
iHour = BinaryPeek2(hBB,160)
sDaylightDate = TimeAdd(ItemReplace(iHour,4,udfGetNthDOWInMonth(StrCat(iYearNow,@58,iMonth,@58,1),iOccurrence,iWeekDay),@58),@000)
iDaylightBias = BinaryPeek4(hBB,168)
EndIf
BinaryConvert(hBB,3,0,0,0) ; Ugly but works.
sStandardName = BinaryPeekStr(hBB,2,32)
sDaylightName = BinaryPeekStr(hBB,44,32)
sResult = StrCat(iResult,@TAB,iCurrentBias,@TAB,sStandardDate,@TAB,iStandardBias,@TAB,sStandardName,@TAB,sDaylightDate,@TAB,iDaylightBias,@TAB,sDaylightName)
Break
EndSwitch
BinaryFree(hBB)
Return (sResult)
;..........................................................................................................................................
; This function returns a tab delimited list of 8 items,
; containing information about Standard and Daylight TimeZone settings.
;
; 1.
; Status of the TIME_ZONE_ID.
; e.g. "2"
;
; TIME_ZONE_ID_INVALID = -1
;
; TIME_ZONE_ID_UNKNOWN = 0 ...
; The system cannot determine the current time zone.
; Windows NT/2000/XP:
; This value is returned if daylight saving time is not used in the current time zone, because there are no transition dates.
;
; TIME_ZONE_ID_STANDARD = 1
; The system is operating in the range covered by the StandardDate member of the TIME_ZONE_INFORMATION structure.
; Windows 95/98/Me:
; This value is returned if daylight saving time is not used in the current time zone, because there are no transition dates.
;
; TIME_ZONE_ID_DAYLIGHT = 2
; The system is operating in the range covered by the DaylightDate member of the TIME_ZONE_INFORMATION structure.
;
; 2.
; Current bias for local time translation on this computer, in minutes.
; The bias is the difference, in minutes, between Coordinated Universal Time (UTC) and local time.
; All translations between UTC and local time are based on the following formula:
; UTC = local time + bias
; e.g. (GMT-10:00) Hawaii ==>iCurrentBias=600
;
; 3.
; StandardDate
; A YmdHms datetime string.
; e.g. "2003:10:26:03:00:00"
;
; 4.
; StandardBias
; Bias value to be used during local time translations that occur during standard time.
; This member is ignored if a value for the StandardDate member is not supplied.
; This value is added to the value of the Bias member to form the bias used during standard time.
; In most time zones, the value of this member is zero.
;
; 5.
; StandardName
; A string associated with standard time on this operating system.
; For example, this member could contain "EST" to indicate Eastern Standard Time.
; This string is not used by the operating system, it has only descriptive information.
; e.g. "(MEZ) Mitteleuropäische Zeit"
;
; 6.
; DaylightDate
; a YmdHms datetime string.
; e.g. "2003:03:30:02:00:00"
;
; 7.
; DaylightBias
; Bias value to be used during local time translations that occur during daylight saving time.
; This member is ignored if a value for the DaylightDate member is not supplied.
; This value is added to the value of the Bias member to form the bias used during daylight saving time.
; In most time zones, the value of this member is - 60.
;
; 8.
; DaylightName
; A string associated with daylight saving time on this operating system.
; For example, this member could contain "PDT" to indicate Pacific Daylight Time.
; This string is not used by the operating system, it has only descriptive information.
; e.g. "(MEZ) - Mitteleurop. Sommerzeit"
;
;..........................................................................................................................................
; Detlev Dalitz.20030920
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;==========================================================================================================================================
;==========================================================================================================================================
; User Defined Functions for the calculation of German Holidays.
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_AscherMittwoch (YmdHms) ; returns datetime string
EasterSunday = udfEasterSunday(YmdHms)
Aschermittwoch = TimeSubtract(EasterSunday,"0:0:40:0:0:0")
While (udfJulianDayOfWeek(Aschermittwoch)!=3)
Aschermittwoch = TimeSubtract(Aschermittwoch,"0:0:1:0:0:0")
EndWhile
Return (Aschermittwoch)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_PalmSonntag (YmdHms) ; returns datetime string
EasterSunday = udfEasterSunday(YmdHms)
Palmsonntag = TimeSubtract(EasterSunday,"0:0:7:0:0:0")
Return (Palmsonntag)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_KarFreitag (YmdHms) ; returns datetime string
EasterSunday = udfEasterSunday(YmdHms)
Karfreitag = TimeSubtract(EasterSunday,"0:0:2:0:0:0")
Return (Karfreitag)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_OsterSonntag (YmdHms) ; returns datetime string
Return (udfEasterSunday(YmdHms))
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_OsterMontag (YmdHms) ; returns datetime string
EasterSunday = udfEasterSunday(YmdHms)
Ostermontag = TimeAdd(EasterSunday,"0:0:1:0:0:0")
Return (Ostermontag)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_WeisserSonntag (YmdHms) ; returns datetime string
EasterSunday = udfEasterSunday(YmdHms)
WeisserSonntag = TimeAdd(EasterSunday,"0:0:7:0:0:0")
Return (WeisserSonntag)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_ChristiHimmelfahrt (YmdHms) ; returns datetime string
EasterSunday = udfEasterSunday(YmdHms)
ChristiHimmelfahrt = TimeAdd(EasterSunday,"0:0:39:0:0:0")
Return (ChristiHimmelfahrt)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_PfingstSonntag (YmdHms) ; returns datetime string
EasterSunday = udfEasterSunday(YmdHms)
PfingstSonntag = TimeAdd(EasterSunday,"0:0:49:0:0:0")
Return (PfingstSonntag)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_PfingstMontag (YmdHms) ; returns datetime string
EasterSunday = udfEasterSunday(YmdHms)
PfingstMontag = TimeAdd(EasterSunday,"0:0:50:0:0:0")
Return (PfingstMontag)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_Fronleichnam (YmdHms) ; returns datetime string
EasterSunday = udfEasterSunday(YmdHms)
Fronleichnam = TimeAdd(EasterSunday,"0:0:60:0:0:0")
Return (Fronleichnam)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_MariaeHimmelfahrt (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
MariaeHimmelfahrt = StrCat(Year,":08:15:00:00:00")
Return (MariaeHimmelfahrt)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_TagDerEinheit (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
TagDerEinheit = StrCat(Year,":10:03:00:00:00")
Return (TagDerEinheit)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_Reformationstag (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
Reformationstag = StrCat(Year,":10:31:00:00:00")
Return (Reformationstag)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_HeiligAbend (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
HeiligAbend = StrCat(Year,":12:24:00:00:00")
Return (HeiligAbend)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_ErsterWeihnachten (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
ErsterWeihnachtstag = StrCat(Year,":12:25:00:00:00")
Return (ErsterWeihnachtstag)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_ZweiterWeihnachten (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
ZweiterWeihnachtstag = StrCat(Year,":12:26:00:00:00")
Return (ZweiterWeihnachtstag)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_Silvester (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
Silvester = StrCat(Year,":12:31:00:00:00")
Return (Silvester)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_Neujahr (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
Neujahr = StrCat(Year,":01:01:00:00:00")
Return (Neujahr)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_ErsterAdvent (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
ErsterAdvent = StrCat(Year,":12:24:00:00:00")
While (udfJulianDayOfWeek(ErsterAdvent)!=0)
ErsterAdvent = TimeSubtract(ErsterAdvent,"0:0:1:0:0:0")
EndWhile
ErsterAdvent = TimeSubtract(ErsterAdvent,"0:0:21:0:0:0")
Return (ErsterAdvent)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_ZweiterAdvent (YmdHms) ; returns datetime string
ErsterAdvent = udfGD_ErsterAdvent(YmdHms)
ZweiterAdvent = TimeAdd(ErsterAdvent,"0:0:7:0:0:0")
Return (ZweiterAdvent)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_DritterAdvent (YmdHms) ; returns datetime string
ErsterAdvent = udfGD_ErsterAdvent(YmdHms)
DritterAdvent = TimeAdd(ErsterAdvent,"0:0:14:0:0:0")
Return (DritterAdvent)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_VierterAdvent (YmdHms) ; returns datetime string
ErsterAdvent = udfGD_ErsterAdvent(YmdHms)
VierterAdvent = TimeAdd(ErsterAdvent,"0:0:21:0:0:0")
Return (VierterAdvent)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_BussUndBettag (YmdHms) ; returns datetime string
BussUndBettag = udfGD_ErsterAdvent(YmdHms)
While (udfJulianDayOfWeek(BussUndBettag)!=3)
BussUndBettag = TimeSubtract(BussUndBettag,"0:0:1:0:0:0")
EndWhile
BussUndBettag = TimeSubtract(BussUndBettag,"0:0:7:0:0:0")
Return (BussUndBettag)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_HeiligeDreiKoenige (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
HeiligeDreiKoenige = StrCat(Year,":01:06:00:00:00")
Return (HeiligeDreiKoenige)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_Allerheiligen (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
Allerheiligen = StrCat(Year,":11:01:00:00:00")
Return (Allerheiligen)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGD_TagDerArbeit (YmdHms) ; returns datetime string
year = ItemExtract(1,YmdHms,":")
TagDerArbeit = StrCat(Year,":05:01:00:00:00")
Return (TagDerArbeit)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfNameOfGD (YmdHms) ; returns string (fast speed)
;Feste Feiertage
mmdd = StrSub(YmdHms,6,5)
NamesFix = "(Silvester),Zweiter Weihnachtstag,Erster Weihnachtstag,Heiligabend,Allerheiligen,(Reformationstag),Tag der Deutschen Einheit,(Mariä Himmelfahrt),Tag der Arbeit,(Heilige Drei Könige),Neujahr"
DaysFix = "12:31,12:26,12:25,12:24,11:01,10:31,10:03,08:15,05:01,01:06,01:01"
d = ItemLocate(mmdd,DaysFix,",")
If (d>0) Then Return (ItemExtract(d,NamesFix,","))
;Advent
ErsterAdvent = udfGD_ErsterAdvent(YmdHms)
If (YmdHms==ErsterAdvent ) Then Return ("Erster Advent")
ZweiterAdvent = TimeAdd(ErsterAdvent,"0:0:7")
If (YmdHms==ZweiterAdvent) Then Return ("Zweiter Advent")
DritterAdvent = TimeAdd(ErsterAdvent,"0:0:14")
If (YmdHms==DritterAdvent) Then Return ("Dritter Advent")
VierterAdvent = TimeAdd(ErsterAdvent,"0:0:21")
If (YmdHms==VierterAdvent) Then Return ("Vierter Advent")
;Bewegliche Feiertage
d = TimeDiffDays(YmdHms,udfEasterSunday(YmdHms))
If (d==-7) Then Return ("(Palmsonntag)")
If (d==-2) Then Return ("Karfreitag")
If (d== 0) Then Return ("Ostersonntag")
If (d== 1) Then Return ("Ostermontag")
If (d== 7) Then Return ("(Weißer Sonntag)")
If (d==39) Then Return ("Christi Himmelfahrt")
If (d==49) Then Return ("Pfingstsonntag")
If (d==50) Then Return ("Pfingstmontag")
If (d==60) Then Return ("(Fronleichnam)")
Aschermittwoch = udfGD_AscherMittwoch(YmdHms)
If (YmdHms==Aschermittwoch) Then Return ("(Aschermittwoch)")
BussUndBettag = udfGD_BussUndBettag(YmdHms)
If (YmdHms==BussUndBettag) Then Return ("(Buß- und Bettag)")
Return ("")
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfNameOfGD2 (YmdHms) ; returns string (slow speed)
If (YmdHms==udfGD_Silvester (YmdHms)) Then Return ("(Silvester)")
If (YmdHms==udfGD_ZweiterWeihnachten(YmdHms)) Then Return ("Zweiter Weihnachtstag")
If (YmdHms==udfGD_ErsterWeihnachten (YmdHms)) Then Return ("Erster Weihnachtstag")
If (YmdHms==udfGD_HeiligAbend (YmdHms)) Then Return ("Heiligabend")
If (YmdHms==udfGD_Allerheiligen (YmdHms)) Then Return ("Allerheiligen")
If (YmdHms==udfGD_BussUndBettag (YmdHms)) Then Return ("(Buß- und Bettag)")
If (YmdHms==udfGD_VierterAdvent (YmdHms)) Then Return ("Vierter Advent")
If (YmdHms==udfGD_DritterAdvent (YmdHms)) Then Return ("Dritter Advent")
If (YmdHms==udfGD_ZweiterAdvent (YmdHms)) Then Return ("Zweiter Advent")
If (YmdHms==udfGD_ErsterAdvent (YmdHms)) Then Return ("Erster Advent")
If (YmdHms==udfGD_Reformationstag (YmdHms)) Then Return ("(Reformationstag)")
If (YmdHms==udfGD_TagDerEinheit (YmdHms)) Then Return ("Tag der Deutschen Einheit")
If (YmdHms==udfGD_MariaeHimmelfahrt (YmdHms)) Then Return ("(Mariä Himmelfahrt)")
If (YmdHms==udfGD_Fronleichnam (YmdHms)) Then Return ("(Fronleichnam)")
If (YmdHms==udfGD_PfingstMontag (YmdHms)) Then Return ("Pfingstmontag")
If (YmdHms==udfGD_PfingstSonntag (YmdHms)) Then Return ("Pfingstsonntag")
If (YmdHms==udfGD_ChristiHimmelfahrt(YmdHms)) Then Return ("Christi Himmelfahrt")
If (YmdHms==udfGD_TagDerArbeit (YmdHms)) Then Return ("Tag der Arbeit")
If (YmdHms==udfGD_WeisserSonntag (YmdHms)) Then Return ("(Weisser Sonntag)")
If (YmdHms==udfGD_OsterMontag (YmdHms)) Then Return ("Ostermontag")
If (YmdHms==udfGD_OsterSonntag (YmdHms)) Then Return ("Ostersonntag")
If (YmdHms==udfGD_KarFreitag (YmdHms)) Then Return ("Karfreitag")
If (YmdHms==udfGD_PalmSonntag (YmdHms)) Then Return ("(Palmsonntag)")
If (YmdHms==udfGD_AscherMittwoch (YmdHms)) Then Return ("(Aschermittwoch)")
If (YmdHms==udfGD_HeiligeDreiKoenige(YmdHms)) Then Return ("(Heilige Drei Könige)")
If (YmdHms==udfGD_Neujahr (YmdHms)) Then Return ("Neujahr")
Return ("")
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGDHashTable (YmdHms, Mode) ; (middle speed)
; (Mode=0="", Mode=1=Name of German Holiday, Mode=2=List of German Holidays)
year = ItemExtract(1,YmdHms,":")
FirstJan = StrCat(year,":01:01:00:00:00")
day_count = udfDaysInYear(year)-1
GoSub SetHashTableParameters
retval = ""
Switch Mode
Case 0 ; Create Hash Table
GoSub OpenWriteHashTable
Break
Case 1 ; Retrieve Name of GD from hash table
If !(udfIsValidDateTime(YmdHms)) Then Break
If !(FileExist(hash_filepathname)) Then Break
GoSub OpenReadHashTable
day_date = TimeAdd(YmdHms,"0:0:0:0:0:0") ; make valid datetime string
GoSub RetrieveNameOfGD
BinaryFree(hash_bb)
Break
Case 2 ; Make List Of GD Names from hash table
If !(udfIsValidDateTime(YmdHms)) Then Break
If !(FileExist(hash_filepathname)) Then Break ; caller have to create hashtable ...
GoSub OpenReadHashTable
GoSub MakeListOfGDNames
BinaryFree(hash_bb)
Break
EndSwitch
Return (retval)
:SetHashTableParameters
tempfile = FileCreateTemp("TMP")
FileDelete(tempfile) ; we only need the folderpath
tempfolder = FilePath(tempfile)
hash_filepathname = StrCat(tempfolder,"HASH",year,".BIN")
hash_entries = 26 ; number of German Holidays
hash_offset_day_date = 0
hash_size_day_date = 19 ; StrLen("0000:00:00:00:00:00")
hash_offset_day_name = hash_offset_day_date + hash_size_day_date
hash_size_day_name = 30
hash_recsize = hash_size_day_date + hash_size_day_name
hash_entries = Int(hash_entries * 1.5) ; reserve some more hash space
hash_tablesize = hash_entries * hash_recsize
Return
:OpenWriteHashTable ; overwrites existing file without permission!
hash_bb = BinaryAlloc(hash_tablesize)
For day=0 To day_count
day_date = TimeAdd(FirstJan,StrCat("0:0:",day))
day_name = udfNameOfGD(day_date)
If (day_name>"")
hash_offset = BinaryHashRec(hash_bb, hash_recsize, hash_offset_day_date, hash_size_day_date, day_date)
BinaryPokeStr(hash_bb, hash_offset + hash_offset_day_name, day_name)
EndIf
Next day
; if (!FileExist(hash_filepathname)) then BinaryWrite(hash_bb,hash_filepathname)
BinaryWrite(hash_bb,hash_filepathname)
BinaryFree(hash_bb)
Return
:OpenReadHashTable
hash_tablesize = FileSize(hash_filepathname)
hash_bb = BinaryAlloc(hash_tablesize)
BinaryRead(hash_bb,hash_filepathname)
Return
:RetrieveNameOfGD
LastErrorMode = ErrorMode(@OFF)
LastError()
hash_offset = BinaryHashRec(hash_bb, hash_recsize, hash_offset_day_date, hash_size_day_date, day_date)
ErrorMode(LastErrorMode)
If (LastError()==0)
retval = BinaryPeekStr(hash_bb, hash_offset + hash_offset_day_name, hash_size_day_name)
If (retval=="") Then BinaryPoke(hash_bb,hash_offset,0) ; housekeeping the hashtable
Else
retval = ""
EndIf
Return
:MakeListOfGDNames
itemlist = ""
For day=0 To day_count
day_date = TimeAdd(FirstJan,StrCat("0:0:",day))
GoSub RetrieveNameOfGD
If (retval>"")
newitempos = ItemCount(itemlist,@LF) + 1
newitem = StrCat(udfTimeDMY(day_date)," ",retval)
itemlist = ItemInsert(newitem, newitempos, itemlist, @LF)
EndIf
Next day
retval = itemlist
Return
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;==========================================================================================================================================
;==========================================================================================================================================
; User Defined Function for string formatting. Uses Date and Time functions.
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfTimeFormatStr (YmdHms, TaggedStr); returns string formatted as defined in TaggedStr
IntControl(73,2,0,0,0) ; Install ErrorHandler for sure.
DTArray = Arrayize(YmdHms,":")
bb = BinaryAlloc(StrLen(TaggedStr)*3) ; reserve working space
BinaryEodSet(bb,0)
BinaryPokeStr(bb,0,TaggedStr)
structure = BinaryTagInit(bb,"{{","}}")
While @TRUE
structure = BinaryTagFind(structure)
If (structure=="") Then Break
keyword = BinaryTagExtr(structure, 1)
Value = "???" ; keyword not found error value
If (keyword>"") Then GoSub %keyword%
structure = BinaryTagRepl(structure,Value)
EndWhile
FormattedStr = BinaryPeekStr(bb,0,BinaryEodGet(bb))
BinaryFree(bb)
Return (FormattedStr)
;--- the labels are the keywords are the labels -----------------------------------------
:YYYY ; Year (fix 4 Digits)
Value = DTArray[0]
Return
:YY ; Year (fix 2 Digits)
Value = StrSub(DTArray[0],3,2)
Return
:Y ; Year (var 1..2 Digits)
Value = 0+StrSub(DTArray[0],3,2)
Return
:MM ; Month (fix 2 Digits)
Value = DTArray[1]
Return
:M ; Month (var 1..2 Digits)
Value = 0+DTArray[1]
Return
; Value = DTArray[1]
; If (StrSub(DTArray[1],1,1)=="0") then Value = StrSub(DTArray[1],2,1)
:DD ; Day (fix 2 Digits)
Value = DTArray[2]
Return
:D ; Day (var 1..2 Digits)
Value = 0+DTArray[2]
Return
; Value = DTArray[2]
; If (StrSub(DTArray[2],1,1)=="0") then Value = StrSub(DTArray[2],2,1)
:HHMMSS
:THHMMSS ; Time (fix 8 Digits)
Value = StrCat(DTArray[3],":",DTArray[4],":",DTArray[5])
Return
:HHMM
:THHMM ; Time (fix 5 Digits)
Value = StrCat(DTArray[3],":",DTArray[4])
Return
:HH
:THH ; TimeHours (fix 2 Digits)
Value = DTArray[3]
Return
:H
:TH ; TimeHours (var 1..2 Digits)
Value = 0+DTArray[3]
Return
; Value = DTArray[3]
; If (StrSub(DTArray[3],1,1)=="0") then Value = StrSub(DTArray[3],2,1)
:MMI
:TMM ; TimeMinutes (fix 2 Digits)
Value = DTArray[4]
Return
:MI
:TM ; TimeMinutes (var 1..2 Digits)
Value = 0+DTArray[4]
Return
; Value = DTArray[4]
; If (StrSub(DTArray[4],1,1)=="0") then Value = StrSub(DTArray[4],2,1)
:SS
:TSS ; TimeSeconds (fix 2 Digits)
Value = DTArray[5]
Return
:S
:TS ; TimeSeconds (var 1..2 Digits)
Value = 0+DTArray[5]
Return
; Value = DTArray[5]
; If (StrSub(DTArray[5],1,1)=="0") then Value = StrSub(DTArray[5],2,1)
:NOML
:MMMM ; NameOfMonth Long
Value = udfNameOfMonth(YmdHms,0)
Return
:NOM2
:MMM2 ; NameOfMonth Short2 (fix 2 Byte)
Value = udfNameOfMonth(YmdHms,2)
Return
:NOM3
:MMM3 ; NameOfMonth Short3 (fix 3 Byte)
Value = udfNameOfMonth(YmdHms,3)
Return
:NODL
:DDDD ; NameOfDay Long
Value = udfNameOfDay(YmdHms,0)
Return
:NOD2
:DDD2 ; NameOfDay Short2 (fix 2 Byte)
Value = udfNameOfDay(YmdHms,2)
Return
:NOD3
:DDD3 ; NameOfDay Short3 (fix 3 Byte)
Value = udfNameOfDay(YmdHms,3)
Return
:WOYL
:WOY2
:WWY ; WeekOfYear Long (fix 2 Digits)
Value = StrFixLeft(udfWeekOfYear(YmdHms),"0",2)
Return
:WOY
:WY ; WeekOfYear Short (var 1..2 Digits)
Value = udfWeekOfYear(YmdHms)
Return
:DOYL
:DOY3
:DDY ; DayOfYear Long (fix 3 Digits)
Value = StrFixLeft(udfDayOfYear(YmdHms),"0",3)
Return
:DOY
:DY ; DayOfYear (var 1..3 Digits)
Value = udfDayOfYear(YmdHms)
Return
:DOW
:DW ; DayOfWeek (fix 1 Digit)
Value = udfDayOfWeek(YmdHms)
Return
:WBERRORHANDLER
wberror = LastError()
wberrmsg = ""
wberrmsg = StrCat(wberrmsg,"LastError Value = ",wberror,@LF)
If !wberror Then wberror = -1
wberrmsg = StrCat(wberrmsg,"LastError String = ",IntControl(34,wberror,0,0,0),@LF)
; line in script that caused Error
wberrmsg = StrCat(wberrmsg,"wberrorhandlerline = ",wberrorhandlerline,@LF)
; offset into script of error line, in bytes
wberrmsg = StrCat(wberrmsg,"wberrorhandleroffset = ",wberrorhandleroffset,@LF)
; variable being assigned on error line, or "" if none
wberrmsg = StrCat(wberrmsg,"wberrorhandlerassignment = ",wberrorhandlerassignment,@LF)
Message("WBERRORHANDLER",wberrmsg)
IntControl(73,2,0,0,0)
Return
;----------------------------------------------------------------------------------------
; examples:
; TaggedStr="Today is {{DDDD}}, {{DD}}. {{MMMM}} {{YYYY}}, Week #{{WY}}, Day #{{DY}}"
; TaggedStr="Year/Week/Day: {{YYYY}}/{{WWY}}/{{DDY}}"
;----------------------------------------------------------------------------------------
; Y ; Year (var 1..2 Digits)
; YY ; Year (fix 2 Digits)
; YYYY ; Year (fix 4 Digits)
;
; M ; Month (var 1..2 Digits)
; MM ; Month (fix 2 Digits)
; MMM2 ; NameOfMonth Short2 (fix 2 Chars)
; MMM3 ; NameOfMonth Short3 (fix 3 Chars)
; MMMM ; NameOfMonth Long (var 3..9 Chars)
;
; D ; Day (var 1..2 Digits)
; DD ; Day (fix 2 Digits)
; DDD2 ; NameOfDay Short2 (fix 2 Chars)
; DDD3 ; NameOfDay Short3 (fix 3 Chars)
; DDDD ; NameOfDay Long (var 6..9 Chars)
;
; THHMMSS ; TimeHMS (fix 8 Digits)
; THHMM ; TimeHM (fix 5 Digits)
; THH ; TimeHours (fix 2 Digits)
; TH ; TimeHours (var 1..2 Digits)
; TMM ; TimeMinutes (fix 2 Digits)
; TM ; TimeMinutes (var 1..2 Digits)
; TSS ; TimeSeconds (fix 2 Digits)
; TS ; TimeSeconds (var 1..2 Digits)
;
; WWY ; WeekOfYear Long (fix 2 Digits)
; WY ; WeekOfYear Short (var 1..2 Digits)
;
; DDY ; DayOfYear Long (fix 3 Digits)
; DY ; DayOfYear (var 1..3 Digits)
;
; DW ; DayOfWeek (fix 1 Digit)
;----------------------------------------------------------------------------------------
; --- alternative keywords ---
; NOD2 ; NameOfDay Short2 (fix 2 Chars)
; NOD3 ; NameOfDay Short3 (fix 3 Chars)
; NODL ; NameOfDay Long (var 6..9 Chars)
;
; NOM2 ; NameOfMonth Short2 (fix 2 Chars)
; NOM3 ; NameOfMonth Short3 (fix 3 Chars)
; NOML ; NameOfMonth Long (var 3..9 Chars)
;
; HHMMSS ; TimeHMS (fix 8 Digits)
; HHMM ; TimeHM (fix 5 Digits)
; HH ; TimeHours (fix 2 Digits)
; H ; TimeHours (var 1..2 Digits)
; MMI ; TimeMinutes (fix 2 Digits)
; MI ; TimeMinutes (var 1..2 Digits)
; SS ; TimeSeconds (fix 2 Digits)
; S ; TimeSeconds (var 1..2 Digits)
;
; WOYL ; WeekOfYear Long (fix 2 Digits)
; WOY2 ; WeekOfYear Long (fix 2 Digits)
; WOY ; WeekOfYear Short (var 1..2 Digits)
;
; DOYL ; DayOfYear Long (fix 3 Digits)
; DOY3 ; DayOfYear Long (fix 3 Digits)
; DOY ; DayOfYear (var 1..3 Digits)
;
; DOW ; DayOfWeek (fix 1 Digit)
;----------------------------------------------------------------------------------------
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;==========================================================================================================================================
;##########################################################################################################################################
;##########################################################################################################################################
; --- test main ---------------------------------------------
;If (IntControl(77,80,0,0,0)>0) Then Return
GoSub Test_DateTime_Functions_1
GoSub Test_DateTime_Functions_2
GoSub Test_DateTime_Functions_3
GoSub Test_DateTime_Functions_4
GoSub Test_FormatString
GoSub Test_GermanDays
;------------------------------------------------------------
;just for testing
;DisplayAllAssignedUDFs
;list = IntControl(77, 103, 0, 0, 0)
;AskItemList("UDF's defined", list, @tab, @unsorted, @single)
;
;DropAllAssignedUDFs
;IntControl (78, 0, 0, 0, 0)
;DisplayAllAssignedUDFs
;list = IntControl(77, 103, 0, 0, 0)
;AskItemList("UDF's defined", list, @tab, @unsorted, @single)
;------------------------------------------------------------
Message("DateTime Functions"," Test done.")
Exit
;##########################################################################################################################################
;##########################################################################################################################################
;==========================================================================================================================================
:Test_FormatString
;------------------------------------------------------------------------------------------------------------------------------------------
TaggedStr = ""
TaggedStr = StrCat(TaggedStr,"Heute ist {{DDD2}} {{D}} {{M}} {{Y}}",@CRLF)
TaggedStr = StrCat(TaggedStr,"Heute ist {{DDD3}} {{D}} {{M}} {{YY}}",@CRLF)
TaggedStr = StrCat(TaggedStr,"Heute ist {{DDDD}}, {{DD}}.{{MM}}.{{YYYY}}",@CRLF)
TaggedStr = StrCat(TaggedStr,"Heute ist {{DDD2}}., {{D}}. {{MMM3}}. {{YYYY}}",@CRLF)
TaggedStr = StrCat(TaggedStr,"Heute ist {{DDDD}}, der {{D}}. {{MMMM}} {{YYYY}}",@CRLF)
TaggedStr = StrCat(TaggedStr,"Jetzt ist es {{TH}} Uhr, {{TM}} Minuten und {{TS}} Sekunden.",@CRLF)
TaggedStr = StrCat(TaggedStr,"Jetzt ist es {{THH}} Uhr, {{TMM}} Minuten und {{TSS}} Sekunden.",@CRLF)
TaggedStr = StrCat(TaggedStr,"Jetzt ist es {{THHMM}} Uhr.",@CRLF)
TaggedStr = StrCat(TaggedStr,"Jetzt ist es {{THHMMSS}} Uhr.",@CRLF)
TaggedStr = StrCat(TaggedStr,"Kalenderwoche {{WY}}",@CRLF)
TaggedStr = StrCat(TaggedStr,"Kalenderwoche {{YYYY}}W{{WWY}}",@CRLF)
TaggedStr = StrCat(TaggedStr,"Kalenderwoche {{YYYY}}W{{WWY}}{{DW}}",@CRLF)
TaggedStr = StrCat(TaggedStr,"Tag des Jahres {{DY}}",@CRLF)
TaggedStr = StrCat(TaggedStr,"Tag des Jahres {{DDY}}/{{YYYY}}",@CRLF)
TaggedStr = StrCat(TaggedStr,"Today is {{DDDD}}, {{DD}}. {{MMMM}} {{YYYY}}, Week {{WY}}, Day {{DY}}",@CRLF)
now = TimeYmdHms()
OutStr = udfTimeFormatStr(now,TaggedStr)
OutStr= StrReplace(OutStr,@CRLF,@TAB)
IntControl(63,200,200,800,800)
AskItemlist("Test: TimeFormatString", OutStr, @TAB, @UNSORTED, @SINGLE)
;------------------------------------------------------------------------------------------------------------------------------------------
Return ; from Test_FormatString
;==========================================================================================================================================
;==========================================================================================================================================
:Test_DateTime_Functions_1
;------------------------------------------------------------------------------------------------------------------------------------------
testdate = "2001:13:01"
testdatetime = "2001:12:01:00:00:60"
now = TimeYmdHms()
OutStr = ""
OutStr = StrCat(OutStr, "Testdate = ", testdate, @CRLF)
OutStr = StrCat(OutStr, "udfIsValidDate, gültig? = ", udfSayNoYes(udfIsValidDate(testdate)), @CRLF, @CRLF)
OutStr = StrCat(OutStr, "Testdatetime = ", testdatetime, @CRLF)
OutStr = StrCat(OutStr, "udfIsValidDate, gültig? = ", udfSayNoYes(udfIsValidDate(testdatetime)), @CRLF)
OutStr = StrCat(OutStr, "udfIsValidDateTime, gültig? = ", udfSayNoYes(udfIsValidDateTime(testdatetime)), @CRLF, @CRLF)
OutStr = StrCat(OutStr, "Now = ", now, @CRLF)
OutStr = StrCat(OutStr, "udfIsValidDateTime, gültig? = ", udfSayNoYes(udfIsValidDateTime(now)), @CRLF,@CRLF)
OutStr = StrCat(OutStr, "udfYmdHmsToUnixSeconds = ", udfYmdHmsToUnixSeconds(now), @CRLF)
OutStr = StrCat(OutStr, "udfUnixSecondsToYmdHms = ", udfUnixSecondsToYmdHms(udfYmdHmsToUnixSeconds(now)), @CRLF, @CRLF)
OutStr = StrCat(OutStr, "udfDayOfYear, Tag im Jahr = ", udfDayOfYear(now), @CRLF)
OutStr = StrCat(OutStr, "udfJulianDayOfWeek, Wochentag Nummer = ", udfJulianDayOfWeek(now), @CRLF)
OutStr = StrCat(OutStr, "udfDayOfWeek, Wochentag Nummer = ", udfDayOfWeek(now), @CRLF)
OutStr = StrCat(OutStr, "udfNameOfDay, Wochentag Name, 2 chars = ", udfNameOfDay(now,2), @CRLF)
OutStr = StrCat(OutStr, "udfNameOfDay, Wochentag Name, lang = ", udfNameOfDay(now,0), @CRLF)
OutStr = StrCat(OutStr, "udfWeekOfYear, Kalenderwoche Nummer = ", udfWeekOfYear(now), @CRLF)
OutStr = StrCat(OutStr, "udfWeekOfYear, Next week, 7 days added = ", udfWeekOfYear(TimeAdd(Now,"0:0:7")), @CRLF)
OutStr = StrCat(OutStr, "udfNameOfMonth, Monat Name, 3 chars = ", udfNameOfMonth(now,3), @CRLF)
OutStr = StrCat(OutStr, "udfNameOfMonth, Monat Name, lang = ", udfNameOfMonth(now,0), @CRLF)
OutStr = StrCat(OutStr, "udfDaysInMonth, Tage im Monat = ", udfDaysInMonth(now), @CRLF)
OutStr = StrCat(OutStr, "udfIsLastDayInMonth, Letzter Tag im Monat? = ", udfSayNoYes(udfIsLastDayInMonth(now)), @CRLF)
OutStr = StrCat(OutStr, "udfDaysInYear, Tage im Jahr = ", udfDaysInYear(now), @CRLF)
OutStr = StrCat(OutStr, "udfIsJulianLeapYear, Schaltjahr? = ", udfSayNoYes(udfIsJulianLeapYear(now)), @CRLF)
OutStr = StrCat(OutStr, "udfIsLeapYear, Schaltjahr? = ", udfSayNoYes(udfIsLeapYear(now)), @CRLF, @CRLF)
OutStr = StrCat(OutStr, "udfEasterSunday_Gauss = " , udfEasterSunday_Gauss(now), @CRLF)
OutStr = StrCat(OutStr, "udfEasterSunday_Schlyter = " , udfEasterSunday_Schlyter(now), @CRLF)
OutStr = StrCat(OutStr, "udfEasterSunday_Lilius_Clavius = " , udfEasterSunday_Lilius_Clavius(now), @CRLF)
OutStr = StrCat(OutStr, "udfEasterSunday_Passah = " , udfEasterSunday_Passah(now), @CRLF, @CRLF)
OutStr = StrCat(OutStr, "udfEasterSunday_Gauss = " , udfEasterSunday_Gauss(udfSetYear(now,1+udfGetYear(now))), @CRLF)
OutStr = StrCat(OutStr, "udfEasterSunday_Schlyter = " , udfEasterSunday_Schlyter(udfSetYear(now,1+udfGetYear(now))), @CRLF)
OutStr = StrCat(OutStr, "udfEasterSunday_Lilius_Clavius = " , udfEasterSunday_Lilius_Clavius(udfSetYear(now,1+udfGetYear(now))), @CRLF)
OutStr = StrCat(OutStr, "udfEasterSunday_Passah = " , udfEasterSunday_Passah(udfSetYear(now,1+udfGetYear(now))), @CRLF, @CRLF)
OutStr = StrCat(OutStr, "udfTimeDMY, dd.mm.yyyy = " , udfTimeDMY(now), @CRLF)
OutStr = StrCat(OutStr, "udfTimeDMYShort, ddd dd.mm.yyyy = " , udfTimeDMYShort(now), @CRLF)
OutStr = StrCat(OutStr, "udfTimeDMYLong, dddd dd.mm.yyyy = " , udfTimeDMYLong(now), @CRLF, @CRLF)
OutStr = StrCat(OutStr, "udfYmdHmsToHTTPStamp (%now%, 1) = " , udfYmdHmsToHTTPStamp(now,1), @CRLF)
OutStr = StrCat(OutStr, "udfYmdHmsToHTTPStamp (%now%, 2) = " , udfYmdHmsToHTTPStamp(now,2), @CRLF)
OutStr = StrCat(OutStr, "udfYmdHmsToHTTPStamp (%now%, 3) = " , udfYmdHmsToHTTPStamp(now,3), @CRLF)
OutStr = StrCat(OutStr, "udfYmdHmsToHTTPStamp (%now%, 4) = " , udfYmdHmsToHTTPStamp(now,4), @CRLF)
OutStr = StrCat(OutStr, "udfYmdHmsToHTTPStamp (%now%, 5) = " , udfYmdHmsToHTTPStamp(now,5), @CRLF, @CRLF)
OutStr = StrCat(OutStr, "udfYmdHmsToYwd (%now%, 0) = " , udfYmdHmsToYwd(now,0), @CRLF)
OutStr = StrCat(OutStr, "udfYmdHmsToYwd (%now%, 1) = " , udfYmdHmsToYwd(now,1), @CRLF)
OutStr = StrCat(OutStr, "udfYwdToYmdHms (""2002W492"") = " , udfYwdtoYmdHms("2002W492"), @CRLF)
OutStr = StrReplace(OutStr,@CRLF,@TAB)
IntControl(28,1,0,0,0)
IntControl(63,100,100,900,900)
AskItemlist("Test: Datum und Zeit Funktionen", OutStr, @TAB, @UNSORTED, @SINGLE)
;------------------------------------------------------------------------------------------------------------------------------------------
Return ; from Test_DateTime_Functions_1
;==========================================================================================================================================
;==========================================================================================================================================
:Test_DateTime_Functions_2
;------------------------------------------------------------------------------------------------------------------------------------------
:test1
now1 = TimeYmdHms()
now2 = "2001:12:31:01:00:00"
now3 = "2004:02:28:01:00:00"
now4 = "2004:02:29:01:00:00"
msgtitle = "Demo udfIsLastDayOfMonth (datetimestr)"
For i=1 To 4
msgtext = ""
msgtext = StrCat(msgtext,"Now is ",now%i%,@LF,@LF)
msgtext = StrCat(msgtext,"Is now the last day of month?",@LF)
msgtext = StrCat(msgtext,udfSayNoYes(udfIsLastDayOfMonth(now%i%)))
Message(msgtitle,msgtext)
Next
:test2
now1 = TimeYmdHms()
now2 = "2001:01:01:01:00:00"
now3 = "2001:01:02:01:00:00"
msgtitle = "Demo udfIsFirstDayOfMonth (datetimestr)"
For i=1 To 3
msgtext = ""
msgtext = StrCat(msgtext,"Now is ",now%i%,@LF,@LF)
msgtext = StrCat(msgtext,"Is now the first day of month?",@LF)
msgtext = StrCat(msgtext,udfSayNoYes(udfIsFirstDayOfMonth(now%i%)))
Message(msgtitle,msgtext)
Next
:test3
now1 = TimeYmdHms()
now2 = "2001:01:15:01:00:00"
now3 = "2004:02:29:01:00:00"
day1 = 1
day2 = 15
day3 = 32 ; "last day" of month
msgtitle = "Demo udfIsNthDayOfMonth (datetimestr, n)"
For i=1 To 3
msgtext = ""
msgtext = StrCat(msgtext,"Now is ",now%i%,@LF,@LF)
msgtext = StrCat(msgtext,"Is now the ",day%i%,". day of month?",@LF)
msgtext = StrCat(msgtext,udfSayNoYes(udfIsNthDayOfMonth(day%i%,now%i%)))
Message(msgtitle,msgtext)
Next
Drop(day1,day2,day3,i,msgtext,msgtitle,now1,now2,now3,now4)
;------------------------------------------------------------------------------------------------------------------------------------------
Return ; from Test_DateTime_Functions_2
;==========================================================================================================================================
;==========================================================================================================================================
:Test_DateTime_Functions_3
;------------------------------------------------------------------------------------------------------------------------------------------
Today = TimeYmdHms()
Sunday = udfGetSundayOfWeek (Today)
Monday = udfGetMondayOfWeek (Today)
Tuesday = udfGetTuesdayOfWeek (Today)
Wednesday = udfGetWednesdayOfWeek (Today)
Thursday = udfGetThursdayOfWeek (Today)
Friday = udfGetFridayOfWeek (Today)
Saturday = udfGetSaturdayOfWeek (Today)
sMsgTitle = "Demo udfGet...dayOfWeek (YmdHms)"
sMsgText = ""
sMsgText = StrCat(sMsgText,"Today" ,@TAB,@TAB," = ",Today ,@LF)
sMsgText = StrCat(sMsgText,@LF,"This Week:",@LF)
sMsgText = StrCat(sMsgText,"Sunday" ,@TAB,@TAB," = ",Sunday ,@LF)
sMsgText = StrCat(sMsgText,"Monday" ,@TAB,@TAB," = ",Monday ,@LF)
sMsgText = StrCat(sMsgText,"Tuesday" ,@TAB,@TAB," = ",Tuesday ,@LF)
sMsgText = StrCat(sMsgText,"Wednesday" ,@TAB," = ",Wednesday,@LF)
sMsgText = StrCat(sMsgText,"Thursday" ,@TAB,@TAB," = ",Thursday ,@LF)
sMsgText = StrCat(sMsgText,"Friday" ,@TAB,@TAB," = ",Friday ,@LF)
sMsgText = StrCat(sMsgText,"Saturday" ,@TAB,@TAB," = ",Saturday ,@LF)
Pause(sMsgTitle,sMsgText)
Drop(Today,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,sMsgTitle,sMsgText)
;------------------------------------------------------------------------------------------------------------------------------------------
Return ; from Test_DateTime_Functions_3
;==========================================================================================================================================
;==========================================================================================================================================
:Test_DateTime_Functions_4
;------------------------------------------------------------------------------------------------------------------------------------------
Today1 = TimeYmdHms()
Today2 = "2002:07:20" ; Saturday
Today3 = "2002:07:21" ; Sunday
Today4 = "2002:07:22" ; Monday
bIsWeekDay1 = udfIsWeekDay(Today1)
bIsWeekDay2 = udfIsWeekDay(Today2)
bIsWeekDay3 = udfIsWeekDay(Today3)
bIsWeekDay4 = udfIsWeekDay(Today4)
bIsWeekendDay1 = udfIsWeekendDay(Today1)
bIsWeekendDay2 = udfIsWeekendDay(Today2)
bIsWeekendDay3 = udfIsWeekendDay(Today3)
bIsWeekendDay4 = udfIsWeekendDay(Today4)
Drop(Today1,Today2,Today3,Today4)
Drop(bIsWeekDay1,bIsWeekDay2,bIsWeekDay3,bIsWeekDay4)
Drop(bIsWeekendDay1,bIsWeekendDay2,bIsWeekendDay3,bIsWeekendDay4)
DecHour1 = udfHmsToDecimalHour(TimeYmdHms()) ; a decimal number e.g. 10.901667
DecHour2 = udfHmsToDecimalHour("12:56:34") ; 12.942778
DecHour3 = udfHmsToDecimalHour("123:123:123") ; 125.084167
DecHour4 = udfHmsToDecimalHour("56:34") ; 0
YmdHms1 = udfDecimalHourToYmdHms(125.084167) ; "0000:00:05:05:05:03"
YmdHms2 = udfDecimalHourToYmdHms(72) ; "0000:00:03:00:00:00"
YmdHms3 = udfDecimalHourToYmdHms(4.7550) ; "0000:00:00:04:45:18"
YmdHms4 = udfDecimalHourToYmdHms(12.942778) ; "0000:00:00:12:56:34"
Drop(DecHour1,DecHour2,DecHour3,DecHour4,YmdHms1,YmdHms2,YmdHms3,YmdHms4)
fDateTime1 = udfYmdHmsToFloat("1899:12:29:12:00:00") ; --> -0.5
fDateTime2 = udfYmdHmsToFloat("1899:12:30:00:00:00") ; --> 0.0
fDateTime3 = udfYmdHmsToFloat("1899:12:31:00:00:00") ; --> 1.0
fDateTime4 = udfYmdHmsToFloat("1900:01:01:00:00:00") ; --> 2.0
fDateTime5 = udfYmdHmsToFloat("1900:01:02:00:00:01") ; --> 3.00001157407407
fDateTime6 = udfYmdHmsToFloat("1900:01:03:00:00:02") ; --> 4.00002314814815
fDateTime7 = udfYmdHmsToFloat(TimeYmdHms())
Drop(fDateTime1,fDateTime2,fDateTime3,fDateTime4,fDateTime5,fDateTime6,fDateTime7)
sYmdHms1 = udfFloatToYmdHms(-0.5) ; --> "1899:12:29:12:00:00"
sYmdHms2 = udfFloatToYmdHms(0.0) ; --> "1899:12:30:00:00:00"
sYmdHms3 = udfFloatToYmdHms(1.0) ; --> "1899:12:31:00:00:00"
sYmdHms4 = udfFloatToYmdHms(2.0) ; --> "1900:01:01:00:00:00"
sYmdHms5 = udfFloatToYmdHms(3.00001157407407) ; --> "1900:01:02:00:00:01"
sYmdHms6 = udfFloatToYmdHms(4.00002314814815) ; --> "1900:01:03:00:00:02"
sYmdHms7 = udfFloatToYmdHms(37792.305555555556) ; --> "2003:06:20:07:19:55"
Drop(sYmdHms1,sYmdHms2,sYmdHms3,sYmdHms4,sYmdHms5,sYmdHms6,sYmdHms7)
iCount1 = udfGetCountDOWInMonth(TimeYmdHms(),-1) ;
iCount2 = udfGetCountDOWInMonth("2002:07:31:00:00:00",1) ; There are 5 Mondays in July 2002.
Drop(iCount1,iCount2)
sYmdHms1 = udfGetNthDOWInMonth("2002:07:05",1,1) ; 1st Monday in Month July 2002
sYmdHms2 = udfGetNthDOWInMonth("2002:07:05",4,1) ; 4th Monday in Month July 2002
sYmdHms3 = udfGetNthDOWInMonth("2002:07:05",10,1) ; 5th Monday in Month July 2002
sYmdHms4 = udfGetNthDOWInMonth("2002:07:05",0,1) ; 1st Monday in Month July 2002
sYmdHms5 = udfGetNthDOWInMonth("2002:07:05",5,0) ; 5th Sunday in Month July 2002
sYmdHms6 = udfGetNthDOWInMonth(TimeYmdHms(),3,3) ; 3rd Wednesday in current Month
Drop(sYmdHms1,sYmdHms2,sYmdHms3,sYmdHms4,sYmdHms5,sYmdHms6)
sYmdHms1 = udfGetLastDayOfMonth("2000:01:01") ; Last day is "2000:01:31"
sYmdHms2 = udfGetLastDayOfMonth("2000:02:01") ; Last day is "2000:02:29"
sYmdHms3 = udfGetLastDayOfMonth("2000:03:01") ; Last day is "2000:03:31"
sYmdHms4 = udfGetLastDayOfMonth("2000:04:01") ; Last day is "2000:04:30"
Drop(sYmdHms1,sYmdHms2,sYmdHms3,sYmdHms4)
sYmdHms1 = udfGetLastDayOfMonth("2000:01:01:12:12:12") ; Last day is "2000:01:31:12:12:12"
sYmdHms2 = udfGetLastDayOfMonth("2000:02:01:12:12:12") ; Last day is "2000:02:29:12:12:12"
sYmdHms3 = udfGetLastDayOfMonth("2000:03:01:12:12:12") ; Last day is "2000:03:31:12:12:12"
sYmdHms4 = udfGetLastDayOfMonth("2000:04:01:12:12:12") ; Last day is "2000:04:30:12:12:12"
Drop(sYmdHms1,sYmdHms2,sYmdHms3,sYmdHms4)
; I would prefer this udfGetLastDayOfMonth_2.
sYmdHms1 = udfGetLastDayOfMonth_2("2000:12:24") ; Last day is "2000:12:31"
sYmdHms2 = udfGetLastDayOfMonth_2("2000:02:24") ; Last day is "2000:02:29"
sYmdHms3 = udfGetLastDayOfMonth_2("2000:03:24") ; Last day is "2000:03:31"
sYmdHms4 = udfGetLastDayOfMonth_2("2000:04:24") ; Last day is "2000:04:30"
Drop(sYmdHms1,sYmdHms2,sYmdHms3,sYmdHms4)
sString1 = udfStrDateTo3Char(TimeYmdHms()) ; e.g. "2GJ"
sString2 = udfStrDateTo3Char("1999:02:13") ; "9BD"
sString3 = udfStrDateTo3Char("1999:02:14") ; "9BE"
sString4 = udfStrDateTo3Char("2004:05:30") ; "4EU"
sString5 = udfStrDateTo3Char("1994:05:30") ; "4EU"
Drop(sString1,sString2,sString3,sString4,sString5)
sString1 = udfStrDateTo4Char(TimeYmdHms()) ; e.g. "2G19"
sString2 = udfStrDateTo4Char("1999:02:13") ; "9B13"
sString3 = udfStrDateTo4Char("1999:02:14") ; "9B14"
sString4 = udfStrDateTo4Char("2004:05:30") ; "4E30"
sString5 = udfStrDateTo4Char("1994:05:30") ; "4E30"
Drop(sString1,sString2,sString3,sString4,sString5)
sString1 = udfStrDateTo8Char(TimeYmdHms()) ; e.g. "2G192341"
sString2 = udfStrDateTo8Char("1999:02:13:13:09:00") ; "9B131309"
sString3 = udfStrDateTo8Char("1999:02:14:13:10:00") ; "9B131310"
sString4 = udfStrDateTo8Char("2004:05:30:09:30:00") ; "4E300930"
sString5 = udfStrDateTo8Char("1994:05:30:09:30:00") ; "4E300930"
Drop(sString1,sString2,sString3,sString4,sString5)
iYear = udfGetYear (TimeYmdHms())
iMonth = udfGetMonth (TimeYmdHms())
iDay = udfGetDay (TimeYmdHms())
iHour = udfGetHour (TimeYmdHms())
iMinute = udfGetMinute (TimeYmdHms())
iSecond = udfGetSecond (TimeYmdHms())
sYmdHms1 = udfSetYear (TimeYmdHms(),2004)
sYmdHms2 = udfSetMonth (TimeYmdHms(),10)
sYmdHms3 = udfSetDay (TimeYmdHms(),5)
sYmdHms4 = udfSetHour (TimeYmdHms(),7)
sYmdHms5 = udfSetMinute (TimeYmdHms(),15)
sYmdHms6 = udfSetSecond (TimeYmdHms(),180)
Drop(iDay,iHour,iMinute,iMonth,iSecond,iYear)
Drop(sYmdHms1,sYmdHms2,sYmdHms3,sYmdHms4,sYmdHms5,sYmdHms6)
iSeconds = 93664
iMode = 0
sText = udfSecondsToDhms(iSeconds,iMode) ; ==> "1 Day 2 Hours 1 Minute 4 Seconds"
iMode = 1
sText = udfSecondsToDhms(iSeconds,iMode) ; ==> "1@TAB2@TAB1@TAB4"
iSeconds = 3664
iMode = 0
sText = udfSecondsToDhms(iSeconds,iMode) ; ==> "0 Days 1 Hour 1 Minute 4 Seconds"
iMode = 1
sText = udfSecondsToDhms(iSeconds,iMode) ; ==> "0@TAB1@TAB1@TAB4"
iSeconds = 936640
iMode = 0
sText = udfSecondsToDhms(iSeconds,iMode) ; ==> "10 Days 20 Hours 10 Minutes 40 Seconds"
iMode = 1
sText = udfSecondsToDhms(iSeconds,iMode) ; ==> "10@TAB20@TAB10@TAB40"
Drop(iMode,iSeconds,sText)
sYmd = udfGetYmd(TimeYmdHms())
sHms = udfGetHms(TimeYmdHms())
sYmdHms1 = udfSetYmd (TimeYmdHms(), "2004:10:05") ; Set the date part.
sYmdHms1 = udfSetYmd (TimeYmdHms(), "2004:18:37") ; Set the date part to "2005:07:07"
sYmdHms2 = udfSetHms (TimeYmdHms(), "11:55:00") ; Set the time part.
sYmdHms3 = udfSetHms (TimeYmdHms(), "48:120:1800") ; Set the date and time part to (2 days + 2 hours + 30 minutes) into the future.
Drop(sHms,sYmd)
Drop(sYmdHms1,sYmdHms2,sYmdHms3)
:test_weekofyear
sYmdHms = "1975:12:29:00:00:00" ; Monday
woy1 = udfWeekOfYear (sYmdHms) ; woy = 53
sYmdHms = "1975:12:31:00:00:00" ; Wednesday
woy2 = udfWeekOfYear (sYmdHms) ; woy = 53
sYmdHms = "1976:01:01:00:00:00" ; Thursday
woy3 = udfWeekOfYear (sYmdHms) ; woy = 1
sYmdHms = "1976:01:02:00:00:00" ; Friday
woy3 = udfWeekOfYear (sYmdHms) ; woy = 1
sYmdHms = "1977:01:02:00:00:00" ; Sunday
woy4 = udfWeekOfYear (sYmdHms) ; woy = 0
sYmdHms = "1977:01:03:00:00:00" ; Monday
woy5 = udfWeekOfYear (sYmdHms) ; woy = 1
sYmdHms = "2002:01:01:00:00:00" ; Tuesday
woy6 = udfWeekOfYear (sYmdHms) ; woy = 1
sYmdHms = "2002:01:07:00:00:00" ; Monday
woy7 = udfWeekOfYear (sYmdHms) ; woy = 2
sYmdHms = "2002:06:30:00:00:00" ; Sunday
woy8 = udfWeekOfYear (sYmdHms) ; woy = 26
sYmdHms = "2002:07:01:00:00:00" ; Monday
woy9 = udfWeekOfYear (sYmdHms) ; woy = 27
Drop(sYmdHms,woy1,woy2,woy3,woy4,woy5,woy6,woy7,woy8,woy9)
:test_WeekOfMonth_1
sYmdHms1 = "2003:07:31:00:00:00"
iWeekOfMonth1 = udfWeekOfYear(sYmdHms1) - udfWeekOfYear(udfSetDay(sYmdHms1,1)) + 1 ; ==> 5
sYmdHms2 = "2003:07:1:00:00:00"
iWeekOfMonth2 = udfWeekOfYear(sYmdHms2) - udfWeekOfYear(udfSetDay(sYmdHms2,1)) + 1 ; ==> 1
sYmdHms3 = TimeYmdHms()
iWeekOfMonth3 = udfWeekOfYear(sYmdHms3) - udfWeekOfYear(udfSetDay(sYmdHms3,1)) + 1
Drop(iWeekOfMonth1,iWeekOfMonth2,iWeekOfMonth3,sYmdHms1,sYmdHms2,sYmdHms3)
:test_WeekOfMonth_2
iWeekOfMonth01 = udfWeekOfMonth(TimeYmdHms(),0)
iWeekOfMonth02 = udfWeekOfMonth(TimeYmdHms(),1)
sYmdHms1 = "2002:12:29:00:00:00"
iWeekOfMonth1 = udfWeekOfMonth(sYmdHms1,1) ; ==> 5
sYmdHms2 = "2002:12:30:00:00:00"
iWeekOfMonth2 = udfWeekOfMonth(sYmdHms2,1) ; ==> 6
sYmdHms3 = "2003:01:05:00:00:00"
iWeekOfMonth3 = udfWeekOfMonth(sYmdHms3,1) ; ==> 1
sYmdHms4 = "2003:01:06:00:00:00"
iWeekOfMonth4 = udfWeekOfMonth(sYmdHms4,1) ; ==> 2
sYmdHms5 = "2003:01:07:00:00:00"
iWeekOfMonth5 = udfWeekOfMonth(sYmdHms5,1) ; ==> 2
sYmdHms6 = "2003:08:01:00:00:00"
iWeekOfMonth6 = udfWeekOfMonth(sYmdHms6,1) ; ==> 1
sYmdHms7 = "2003:08:17:00:00:00"
iWeekOfMonth7 = udfWeekOfMonth(sYmdHms7,1) ; ==> 3
sYmdHms8 = "2003:08:18:00:00:00"
iWeekOfMonth8 = udfWeekOfMonth(sYmdHms8,1) ; ==> 4
sYmdHms9 = "2003:08:25:00:00:00"
iWeekOfMonth9 = udfWeekOfMonth(sYmdHms9,1) ; ==> 5
sYmdHms10 = "2004:05:01:00:00:00"
iWeekOfMonth10 = udfWeekOfMonth(sYmdHms10,1) ; ==> 1
sYmdHms11 = "2004:05:02:00:00:00"
iWeekOfMonth11 = udfWeekOfMonth(sYmdHms11,1) ; ==> 1
sYmdHms12 = "2004:05:03:00:00:00"
iWeekOfMonth12 = udfWeekOfMonth(sYmdHms12,1) ; ==> 2
sYmdHms13 = "2004:05:30:00:00:00"
iWeekOfMonth13 = udfWeekOfMonth(sYmdHms13,1) ; ==> 5
sYmdHms14 = "2004:05:31:00:00:00"
iWeekOfMonth14 = udfWeekOfMonth(sYmdHms14,1) ; ==> 6
sYmdHms15 = "2004:02:29:00:00:00"
iWeekOfMonth15 = udfWeekOfMonth(sYmdHms15,1) ; ==> 5
sYmdHms16 = "2013:08:19:00:00:00"
iWeekOfMonth16 = udfWeekOfMonth(sYmdHms16,1) ; ==> 4
sYmdHms17 = "2013:12:30:00:00:00"
iWeekOfMonth17 = udfWeekOfMonth(sYmdHms17,1) ; ==> 6
Drop(iWeekOfMonth0,iWeekOfMonth1,iWeekOfMonth10,iWeekOfMonth11,iWeekOfMonth12,iWeekOfMonth13,iWeekOfMonth14,iWeekOfMonth15)
Drop(iWeekOfMonth16,iWeekOfMonth17,iWeekOfMonth2,iWeekOfMonth3,iWeekOfMonth4,iWeekOfMonth5,iWeekOfMonth6,iWeekOfMonth7)
Drop(iWeekOfMonth8,iWeekOfMonth9,sYmdHms0,sYmdHms1,sYmdHms10,sYmdHms11,sYmdHms12,sYmdHms13)
Drop(sYmdHms14,sYmdHms15,sYmdHms16,sYmdHms17,sYmdHms2,sYmdHms3,sYmdHms4,sYmdHms5)
Drop(sYmdHms6,sYmdHms7,sYmdHms8,sYmdHms9)
:test_calendar
IntControl(63,300,200,700,550)
IntControl(28,1,0,0,0)
sCal = udfCalendar(TimeYmdHms())
AskItemlist("Demo udfCalender (sYmdHms)", StrReplace(sCal,@CRLF,@TAB),@TAB,@UNSORTED,@SINGLE)
sCal = ""
For iMonth=1 To 12
sCal = StrCat(sCal,udfCalendar("2003:%iMonth%:01"))
Next
IntControl(63,300,100,700,950)
IntControl(28,1,0,0,0)
AskItemlist("Demo udfCalender (sYmdHms)", StrReplace(sCal,@CRLF,@TAB),@TAB,@UNSORTED,@SINGLE)
Drop(iMonth,sCal)
:test_YmdHmsToYWD
sYwd1 = udfYmdHmsToYwd(TimeYmdHms(),0) ; e.g. "2002W30"
sYwd2 = udfYmdHmsToYwd(TimeYmdHms(),1) ; e.g. "2002W301"
sYwd3 = udfYmdHmsToYwd("1995:12:31",1) ; "1995W527"
sYwd4 = udfYmdHmsToYwd("1996:01:01",1) ; "1996W011"
sYwd5 = udfYmdHmsToYwd("1996:12:29",1) ; "1996W527"
sYwd6 = udfYmdHmsToYwd("1996:12:30",1) ; "1997W011"
sYwd7 = udfYmdHmsToYwd("1996:12:31",1) ; "1997W012"
sYwd8 = udfYmdHmsToYwd("1997:01:01",1) ; "1997W013"
Drop(sYwd1,sYwd2,sYwd3,sYwd4,sYwd5,sYwd6,sYwd7,sYwd8)
:test_YwdToYmdHms
sYmdHms1 = udfYwdtoYmdHms("2002W303") ; "2002:07:24:00:00:00" Wednesday
sYmdHms2 = udfYwdtoYmdHms("2002W30") ; "2002:07:22:00:00:00" Monday
sYmdHms3 = udfYwdtoYmdHms("2002W01") ; "2001:12:31:00:00:00" Monday
sYmdHms4 = udfYwdtoYmdHms("2002W011") ; "2001:12:31:00:00:00" Monday
sYmdHms5 = udfYwdtoYmdHms("2002W012") ; "2002:01:01:00:00:00" Tuesday
sYmdHms6 = udfYwdtoYmdHms("2001W53") ; "2001:12:31:00:00:00" Monday ; Note: Week "2001W53" is invalid, is actually "2002W01".
sYmdHms6 = udfYwdtoYmdHms("2001W537") ; "2002:01:06:00:00:00" Sunday ; Note: Week "2001W53" is invalid, is actually "2002W01".
Drop(sYmdHms1,sYmdHms2,sYmdHms3,sYmdHms4,sYmdHms5,sYmdHms6)
:test_RoundTo
sYmdHms11 = udfRoundToMinute("2002:07:22:19:29:20",0) ; "2002:07:22:19:29:00"
sYmdHms12 = udfRoundToMinute("2002:07:22:19:29:40",0) ; "2002:07:22:19:30:00"
sYmdHms13 = udfRoundToMinute("2002:07:22:19:29:40",1) ; "2002:07:22:19:29:00"
sYmdHms21 = udfRoundToHour("2002:07:22:19:29:20",0) ; "2002:07:22:19:00:00"
sYmdHms22 = udfRoundToHour("2002:07:22:19:30:10",0) ; "2002:07:22:20:00:00"
sYmdHms23 = udfRoundToHour("2002:07:22:19:31:40",1) ; "2002:07:22:19:00:00"
sYmdHms31 = udfRoundToDay("2002:07:22:11:29:20",0) ; "2002:07:22:00:00:00"
sYmdHms32 = udfRoundToDay("2002:07:22:19:30:10",0) ; "2002:07:23:00:00:00"
sYmdHms33 = udfRoundToDay("2002:07:22:19:31:40",1) ; "2002:07:22:00:00:00"
sYmdHms41 = udfRoundToMonth("2002:12:22:11:29:20",0) ; "2003:01:01:00:00:00"
sYmdHms42 = udfRoundToMonth("2002:07:12:19:30:10",0) ; "2002:07:01:00:00:00"
sYmdHms43 = udfRoundToMonth("2002:07:22:19:31:40",1) ; "2002:07:01:00:00:00"
sYmdHms51 = udfRoundToYear("2002:12:22:11:29:20",0) ; "2003:01:01:00:00:00"
sYmdHms52 = udfRoundToYear("2002:05:12:19:30:10",0) ; "2002:01:01:00:00:00"
sYmdHms53 = udfRoundToYear("2002:07:22:19:31:40",1) ; "2002:01:01:00:00:00"
sYmdHms61 = udfRoundToQuarter("2002:02:22:19:29:20",0) ; "2002:04:01:00:00:00"
sYmdHms62 = udfRoundToQuarter("2002:02:12:19:29:20",0) ; "2002:01:01:00:00:00"
sYmdHms63 = udfRoundToQuarter("2002:02:22:19:29:20",1) ; "2002:01:01:00:00:00"
sYmdHms71 = udfRoundToQuarter("2002:11:22:19:29:20",0) ; "2003:01:01:00:00:00"
sYmdHms72 = udfRoundToQuarter("2002:11:12:19:29:20",0) ; "2002:10:01:00:00:00"
sYmdHms73 = udfRoundToQuarter("2002:11:22:19:29:20",1) ; "2002:10:01:00:00:00"
Drop(sYmdHms11,sYmdHms12,sYmdHms13)
Drop(sYmdHms21,sYmdHms22,sYmdHms23)
Drop(sYmdHms31,sYmdHms32,sYmdHms33)
Drop(sYmdHms41,sYmdHms42,sYmdHms43)
Drop(sYmdHms51,sYmdHms52,sYmdHms53)
Drop(sYmdHms61,sYmdHms62,sYmdHms63)
Drop(sYmdHms71,sYmdHms72,sYmdHms73)
:test_GetWeekDayNext
sYmdHms11 = udfGetWeekDayNext(TimeYmdHms())
sYmdHms12 = udfGetWeekDayNext("2002:10:25:00:00:00") ; "2002:10:28:00:00:00"
sYmdHms13 = udfGetWeekDayNext("2002:10:26:00:00:00") ; "2002:10:28:00:00:00"
sYmdHms14 = udfGetWeekDayNext("2002:10:27:00:00:00") ; "2002:10:28:00:00:00"
sYmdHms15 = udfGetWeekDayNext("2002:10:28:00:00:00") ; "2002:10:29:00:00:00"
Drop(sYmdHms11,sYmdHms12,sYmdHms13,sYmdHms14,sYmdHms15)
:test_GetWeekDayPrev
sYmdHms21 = udfGetWeekDayPrev(TimeYmdHms())
sYmdHms22 = udfGetWeekDayPrev("2002:10:25:00:00:00") ; "2002:10:24:00:00:00"
sYmdHms23 = udfGetWeekDayPrev("2002:10:26:00:00:00") ; "2002:10:25:00:00:00"
sYmdHms24 = udfGetWeekDayPrev("2002:10:27:00:00:00") ; "2002:10:25:00:00:00"
sYmdHms25 = udfGetWeekDayPrev("2002:10:28:00:00:00") ; "2002:10:25:00:00:00"
Drop(sYmdHms21,sYmdHms22,sYmdHms23,sYmdHms24,sYmdHms25)
:test_LeapYear
For i=1990 To 2004
bLeap%i%Julian = udfIsJulianLeapYear(%i%)
bLeap%i%Boolean = udfIsLeapYear(%i%)
Next
DropWild("bLeap*")
:test_DayOfWeek
sYmdHms = "2002:10:27"
iDow1 = udfJulianDayOfWeek (sYmdHms) ; 0
iDow2 = udfDayOfWeek (sYmdHms) ; 7
Drop(iDow1,iDow2)
:test_AgeDifference
iAge1 = udfAgeDifference("1990:01:01", "2006:01:01", 0) ; 16
iAge2 = udfAgeDifference("1990:01:01", "2006:01:05", 0) ; 16
iAge3 = udfAgeDifference("1990:01:09", "2006:01:05", 0) ; 15
iAge4 = udfAgeDifference("1990:01:01:09:00:00", "2006:01:01:05:00:00", 0) ; 16
iAge5 = udfAgeDifference("1990:01:01:09:00:00", "2006:01:01:05:00:00", 1) ; 15
Drop(iAge1,iAge2,iAge3,iAge4,iAge5)
:test_NameOfDay
sYmdHms = TimeYmdHms()
sString11 = udfNameOfDay (sYmdHms, 0) ; "Dienstag"
sString12 = udfNameOfDay (sYmdHms, 1) ; "D"
sString13 = udfNameOfDay (sYmdHms, 2) ; "Di"
sString14 = udfNameOfDay (sYmdHms, 3) ; "Die"
sString15 = udfNameOfDay (sYmdHms, 7) ; "Diensta"
sString16 = udfNameOfDay (sYmdHms, 10) ; "Dienstag "
Drop(sString11,sString12,sString13,sString14,sString15,sString16,sYmdHms)
:test_NameOfMonth
sYmdHms = TimeYmdHms()
sString21 = udfNameOfMonth (sYmdHms, 0) ; "Juli"
sString22 = udfNameOfMonth (sYmdHms, 1) ; "J"
sString23 = udfNameOfMonth (sYmdHms, 2) ; "Ju"
sString24 = udfNameOfMonth (sYmdHms, 3) ; "Jul"
sString25 = udfNameOfMonth (sYmdHms, 7) ; "Juli "
sString26 = udfNameOfMonth (sYmdHms, 10) ; "Juli "
Drop(sString21,sString22,sString23,sString24,sString25,sString26,sYmdHms)
:test_GetZodiac
sYmdHms = "2001:12:30:00:00:00"
sZodiac1 = udfGetZodiac(sYmdHms) ; "Capricorn" "Steinbock"
sYmdHms = "2002:01:10:00:00:00"
sZodiac2 = udfGetZodiac(sYmdHms) ; "Capricorn" "Steinbock"
sYmdHms = "2002:02:10:00:00:00"
sZodiac3 = udfGetZodiac(sYmdHms) ; "Aquarius" "Wassermann"
sYmdHms = "2002:03:21:00:00:00"
sZodiac4 = udfGetZodiac(sYmdHms) ; "Aries" "Widder"
sYmdHms = "2002:12:21:00:00:00"
sZodiac5 = udfGetZodiac(sYmdHms) ; "Sagittarius" "Schütze"
sYmdHms = "2002:12:22:00:00:00"
sZodiac6 = udfGetZodiac(sYmdHms) ; "Capricorn" "Steinbock"
Drop(sYmdHms,sZodiac1,sZodiac2,sZodiac3,sZodiac4,sZodiac5,sZodiac6)
:test_GetSeason
sYmdHms = "2001:12:30:00:00:00"
sSeason1 = udfGetSeason(sYmdHms) ; "Winter" "Winter"
sYmdHms = "2002:03:20:00:00:00"
sSeason2 = udfGetSeason(sYmdHms) ; "Winter" "Winter"
sYmdHms = "2002:03:21:00:00:00"
sSeason3 = udfGetSeason(sYmdHms) ; "Frühling" "Spring"
sYmdHms = "2002:06:22:00:00:00"
sSeason4 = udfGetSeason(sYmdHms) ; "Sommer" "Summer"
sYmdHms = "2002:09:24:00:00:00"
sSeason5 = udfGetSeason(sYmdHms) ; "Herbst" "Fall"
sYmdHms = "2002:12:22:00:00:00"
sSeason6 = udfGetSeason(sYmdHms) ; "Winter" "Winter"
Drop(sYmdHms,sSeason1,sSeason2,sSeason3,sSeason4,sSeason5,sSeason6)
:test_GetTimezoneInfo
sMsgTitle = "Demo udfGetTimezoneInfo()"
sTimezoneInfo = udfGetTimezoneInfo()
iStatus = ItemExtract(1,sTimezoneInfo,@TAB)
iCurrentBias = ItemExtract(2,sTimezoneInfo,@TAB)
sStandardName = ItemExtract(5,sTimezoneInfo,@TAB)
sStandardDate = ItemExtract(3,sTimezoneInfo,@TAB)
iStandardBias = ItemExtract(4,sTimezoneInfo,@TAB)
sDaylightName = ItemExtract(8,sTimezoneInfo,@TAB)
sDaylightDate = ItemExtract(6,sTimezoneInfo,@TAB)
iDaylightBias = ItemExtract(7,sTimezoneInfo,@TAB)
sStatus = ItemExtract(2+iStatus,"Invalid,Unknown,Standard,Daylight saving",",")
TzInfoFormat=`WWWDLGED,6.1`
TzInfoCaption=`Timezone Information`
TzInfoX=-01
TzInfoY=-01
TzInfoWidth=178
TzInfoHeight=193
TzInfoNumControls=022
TzInfoProcedure=`DEFAULT`
TzInfoFont=`DEFAULT`
TzInfoTextColor=`DEFAULT`
TzInfoBackground=`DEFAULT,240|236|192`
TzInfoConfig=1
TzInfo001=`069,043,100,012,EDITBOX,iCurrentBias,DEFAULT,DEFAULT,4,8,DEFAULT,DEFAULT,"255|255|255"`
TzInfo002=`069,153,100,012,EDITBOX,iDaylightBias,DEFAULT,DEFAULT,10,8,DEFAULT,DEFAULT,"255|255|255"`
TzInfo003=`069,097,100,012,EDITBOX,iStandardBias,DEFAULT,DEFAULT,7,8,DEFAULT,DEFAULT,"255|255|255"`
TzInfo004=`069,029,024,012,EDITBOX,iStatus,DEFAULT,DEFAULT,2,8,DEFAULT,DEFAULT,"255|255|255"`
TzInfo005=`069,139,100,012,EDITBOX,sDaylightDate,DEFAULT,DEFAULT,9,8,DEFAULT,DEFAULT,"255|255|255"`
TzInfo006=`069,125,100,012,EDITBOX,sDaylightName,DEFAULT,DEFAULT,8,8,DEFAULT,DEFAULT,"255|255|255"`
TzInfo007=`069,083,100,012,EDITBOX,sStandardDate,DEFAULT,DEFAULT,6,8,DEFAULT,DEFAULT,"255|255|255"`
TzInfo008=`069,069,100,012,EDITBOX,sStandardName,DEFAULT,DEFAULT,5,8,DEFAULT,DEFAULT,"255|255|255"`
TzInfo009=`095,029,074,012,EDITBOX,sStatus,DEFAULT,DEFAULT,3,8,DEFAULT,DEFAULT,"255|255|255"`
TzInfo010=`003,117,170,052,GROUPBOX,DEFAULT,"Daylight",DEFAULT,33,DEFAULT,"MS Sans Serif|5632|40|34","0|128|128","240|236|192"`
TzInfo011=`003,061,170,052,GROUPBOX,DEFAULT,"Standard",DEFAULT,32,DEFAULT,"MS Sans Serif|5632|40|34","0|128|128","240|236|192"`
TzInfo012=`003,021,170,038,GROUPBOX,DEFAULT,DEFAULT,DEFAULT,31,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TzInfo013=`073,175,036,012,PUSHBUTTON,DEFAULT,"OK",1,1,32,"MS Sans Serif|5632|70|34","0|128|128","240|236|192"`
TzInfo014=`007,141,060,012,STATICTEXT,DEFAULT,"Begin of Daylight Time",DEFAULT,27,0,DEFAULT,DEFAULT,DEFAULT`
TzInfo015=`007,085,060,012,STATICTEXT,DEFAULT,"Begin of Standard Time",DEFAULT,24,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TzInfo016=`007,041,060,016,STATICTEXT,DEFAULT,"Bias for local time translation",DEFAULT,22,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TzInfo017=`007,155,060,012,STATICTEXT,DEFAULT,"Daylight Bias",DEFAULT,28,0,DEFAULT,DEFAULT,DEFAULT`
TzInfo018=`007,099,060,012,STATICTEXT,DEFAULT,"Standard Bias",DEFAULT,25,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TzInfo019=`003,005,170,016,STATICTEXT,DEFAULT,"Timezone Information",DEFAULT,20,0,"Verdana|13824|70|34","0|128|128",DEFAULT`
TzInfo020=`007,031,060,012,STATICTEXT,DEFAULT,"Timezone Status",DEFAULT,21,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TzInfo021=`007,127,060,012,STATICTEXT,DEFAULT,"Zonename",DEFAULT,26,0,DEFAULT,DEFAULT,DEFAULT`
TzInfo022=`007,071,060,012,STATICTEXT,DEFAULT,"Zonename",DEFAULT,23,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
TzInfoButtonPushed=Dialog("TzInfo")
:CANCEL
DropWild("TzInfo*")
Drop(iCurrentBias,iDaylightBias,iStandardBias,iStatus,sDaylightDate,sDaylightName,sMsgTitle,sStandardDate,sStandardName,sStatus,sTimezoneInfo)
;------------------------------------------------------------------------------------------------------------------------------------------
Return ; from Test_DateTime_Functions_4
;==========================================================================================================================================
;==========================================================================================================================================
:Test_GermanDays
;------------------------------------------------------------------------------------------------------------------------------------------
;create hash table
tempfile = FileCreateTemp("TMP")
FileDelete(tempfile) ; we only need the folderpath
tempfolder = FilePath(tempfile)
hash_filepathname = StrCat(tempfolder,"HASH",ItemExtract(1,TimeYmdHms(),":"),".BIN")
If !FileExist(hash_filepathname) Then udfGDHashTable(TimeYmdHms(),0)
;retrieve German Holiday name
Heiligabend = "2001:12:24" ; not valid datetime string
;Heiligabend = "2001:12:24:00:00:00" ; valid datetime string
Pause("Read HashTable: Heiligabend", StrCat(udfTimeDMY(Heiligabend)," ",udfGDHashTable(Heiligabend,1)))
now = TimeYmdHms()
Aschermittwoch = udfGD_AscherMittwoch(now)
Pause("Read HashTable: Aschermittwoch", StrCat(udfTimeDMY(Aschermittwoch)," ",udfGDHashTable(Aschermittwoch,1)))
;------------------------------------------------------------------------------------------------------------------------------------------
;list GD names, from hash table
Start = TimeYmdHms()
OutStr = udfGDHashTable(Start,2)
Stop = TimeYmdHms()
Seconds = TimeDiffSecs(Stop,Start)
OutStr = StrCat(OutStr,@LF,@LF,"All values read from hash table: ",Seconds," s",@LF)
Pause("Test1: Deutsche Feiertage", OutStr)
;------------------------------------------------------------------------------------------------------------------------------------------
;list German Holidays names, calculated
Start = TimeYmdHms()
now = TimeYmdHms()
OutStr = ""
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_Neujahr(now)), " ",udfNameOfGD(udfGD_Neujahr(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_HeiligeDreiKoenige(now))," ",udfNameOfGD(udfGD_HeiligeDreiKoenige(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_AscherMittwoch(now)), " ",udfNameOfGD(udfGD_AscherMittwoch(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_PalmSonntag(now)), " ",udfNameOfGD(udfGD_PalmSonntag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_KarFreitag(now)), " ",udfNameOfGD(udfGD_KarFreitag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_OsterSonntag(now)), " ",udfNameOfGD(udfGD_OsterSonntag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_OsterMontag(now)), " ",udfNameOfGD(udfGD_OsterMontag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_WeisserSonntag(now)), " ",udfNameOfGD(udfGD_WeisserSonntag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_TagDerArbeit(now)), " ",udfNameOfGD(udfGD_TagDerArbeit(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_ChristiHimmelfahrt(now))," ",udfNameOfGD(udfGD_ChristiHimmelfahrt(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_PfingstSonntag(now)), " ",udfNameOfGD(udfGD_PfingstSonntag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_PfingstMontag(now)), " ",udfNameOfGD(udfGD_PfingstMontag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_Fronleichnam(now)), " ",udfNameOfGD(udfGD_Fronleichnam(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_MariaeHimmelfahrt(now)), " ",udfNameOfGD(udfGD_MariaeHimmelfahrt(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_TagDerEinheit(now)), " ",udfNameOfGD(udfGD_TagDerEinheit(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_Reformationstag(now)), " ",udfNameOfGD(udfGD_Reformationstag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_Allerheiligen(now)), " ",udfNameOfGD(udfGD_Allerheiligen(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_BussUndBettag(now)), " ",udfNameOfGD(udfGD_BussUndBettag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_ErsterAdvent(now)), " ",udfNameOfGD(udfGD_ErsterAdvent(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_ZweiterAdvent(now)), " ",udfNameOfGD(udfGD_ZweiterAdvent(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_DritterAdvent(now)), " ",udfNameOfGD(udfGD_DritterAdvent(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_VierterAdvent(now)), " ",udfNameOfGD(udfGD_VierterAdvent(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_HeiligAbend(now)), " ",udfNameOfGD(udfGD_HeiligAbend(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_ErsterWeihnachten(now)), " ",udfNameOfGD(udfGD_ErsterWeihnachten(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_ZweiterWeihnachten(now))," ",udfNameOfGD(udfGD_ZweiterWeihnachten(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_Silvester(now)), " ",udfNameOfGD(udfGD_Silvester(now)), @LF, @LF)
Stop = TimeYmdHms()
Seconds = TimeDiffSecs(Stop,Start)
OutStr = StrCat(OutStr, "All values calculated: ",Seconds," s",@LF)
Pause("Test2: Deutsche Feiertage", OutStr)
;------------------------------------------------------------------------------------------------------------------------------------------
;list German Holidays names, fully calculated
Start = TimeYmdHms()
now = TimeYmdHms()
OutStr = ""
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_Neujahr(now)), " ",udfNameOfGD2(udfGD_Neujahr(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_HeiligeDreiKoenige(now))," ",udfNameOfGD2(udfGD_HeiligeDreiKoenige(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_AscherMittwoch(now)), " ",udfNameOfGD2(udfGD_AscherMittwoch(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_PalmSonntag(now)), " ",udfNameOfGD2(udfGD_PalmSonntag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_KarFreitag(now)), " ",udfNameOfGD2(udfGD_KarFreitag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_OsterSonntag(now)), " ",udfNameOfGD2(udfGD_OsterSonntag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_OsterMontag(now)), " ",udfNameOfGD2(udfGD_OsterMontag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_WeisserSonntag(now)), " ",udfNameOfGD2(udfGD_WeisserSonntag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_TagDerArbeit(now)), " ",udfNameOfGD2(udfGD_TagDerArbeit(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_ChristiHimmelfahrt(now))," ",udfNameOfGD2(udfGD_ChristiHimmelfahrt(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_PfingstSonntag(now)), " ",udfNameOfGD2(udfGD_PfingstSonntag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_PfingstMontag(now)), " ",udfNameOfGD2(udfGD_PfingstMontag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_Fronleichnam(now)), " ",udfNameOfGD2(udfGD_Fronleichnam(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_MariaeHimmelfahrt(now)), " ",udfNameOfGD2(udfGD_MariaeHimmelfahrt(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_TagDerEinheit(now)), " ",udfNameOfGD2(udfGD_TagDerEinheit(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_Reformationstag(now)), " ",udfNameOfGD2(udfGD_Reformationstag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_Allerheiligen(now)), " ",udfNameOfGD2(udfGD_Allerheiligen(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_BussUndBettag(now)), " ",udfNameOfGD2(udfGD_BussUndBettag(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_ErsterAdvent(now)), " ",udfNameOfGD2(udfGD_ErsterAdvent(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_ZweiterAdvent(now)), " ",udfNameOfGD2(udfGD_ZweiterAdvent(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_DritterAdvent(now)), " ",udfNameOfGD2(udfGD_DritterAdvent(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_VierterAdvent(now)), " ",udfNameOfGD2(udfGD_VierterAdvent(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_HeiligAbend(now)), " ",udfNameOfGD2(udfGD_HeiligAbend(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_ErsterWeihnachten(now)), " ",udfNameOfGD2(udfGD_ErsterWeihnachten(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_ZweiterWeihnachten(now))," ",udfNameOfGD2(udfGD_ZweiterWeihnachten(now)), @LF)
OutStr = StrCat(OutStr, udfTimeDMY(udfGD_Silvester(now)), " ",udfNameOfGD2(udfGD_Silvester(now)), @LF, @LF)
Stop = TimeYmdHms()
Seconds = TimeDiffSecs(Stop,Start)
OutStr = StrCat(OutStr, "All values calculated: ",Seconds," s",@LF)
Pause("Test3: Deutsche Feiertage", OutStr)
;------------------------------------------------------------------------------------------------------------------------------------------
Return ; from Test_GermanDays
;==========================================================================================================================================
;*EOF*