Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include-once
- ;===============================================================================
- ;
- ; AutoIt Version: 3.2.3.0
- ; Language: English
- ; Description: Dll wrapper functions for dealing with Unix timestamps.
- ; Requirement(s): CrtDll.dll
- ; Notes: If CrtDll.dll is not available then functions will return false
- ; and set @error = 99.
- ;
- ;===============================================================================
- ;===============================================================================
- ;
- ; Description: _TimeGetStamp - Get current time as Unix timestamp value.
- ; Parameter(s): None
- ; Return Value(s): On Success - Returns Unix timestamp
- ; On Failure - Returns False, sets @error = 99
- ; Author(s): Rob Saunders (admin@therks.com)
- ; User Calltip: _TimeGetStamp() - Get current time as Unix timestamp value. (required: <_UnixTime.au3>)
- ;
- ;===============================================================================
- Func _TimeGetStamp()
- Local $av_Time
- $av_Time = DllCall('CrtDll.dll', 'long:cdecl', 'time', 'ptr', 0)
- If @error Then
- SetError(99)
- Return False
- EndIf
- Return $av_Time[0]
- EndFunc
- ;===============================================================================
- ;
- ; Description: _TimeMakeStamp - Create Unix timestamp from input values.
- ; Syntax: _TimeMakeStamp( [ second [, minute [, hour [, day [, month [, year [, isDST ]]]]]]] )
- ; Parameter(s): Second - Second for timestamp (0 - 59)
- ; Minute - Minute for timestamp (0 - 59)
- ; Hour - Hour for timestamp (0 - 23)
- ; Day - Day for timestamp (1 - 31)
- ; Month - Month for timestamp (1 - 12)
- ; Year - Year for timestamp (1970 - 2038)
- ; * All the above values default to the 'Default' keyword, where the current
- ; time/date value will be used.
- ; IsDST - Set to 1 during Daylight Saving Time (DST)
- ; - Set to 0 not during DST
- ; - Set to -1 if unknown, function will try to figure it out
- ; - Default is -1
- ; Return Value(s): On Success - Returns Unix timestamp
- ; On Failure - Parameter error, returns -1
- ; - Dll error, returns False, sets @error = 99
- ; Notes: The function will try and calculate dates for numbers outside of the
- ; usual range.
- ; For example: _TimeMakeStamp(0, 0, 0, 32, 1, 1995)
- ; 32nd day of January? Obviously that's not a valid date, but the function
- ; automatically calculates this to be February 1st. A date of 0 will return
- ; the last day of the previous month.
- ; User CallTip: _TimeMakeStamp($i_Sec = Default, $i_Min = Default, $i_Hour = Default, $i_Day = Default, $i_Mon = Default, $i_Year = Default, $i_IsDST = -1) - Create a UNIX timestamp from input values. (required: <_UnixTime.au3>)
- ; Author(s): Rob Saunders (admin@therks.com)
- ;
- ;===============================================================================
- Func _TimeMakeStamp($i_Sec = Default, $i_Min = Default, $i_Hour = Default, $i_Day = Default, $i_Mon = Default, $i_Year = Default, $i_IsDST = -1)
- Local $struct_Time, $ptr_Time, $av_Time
- $struct_Time = DllStructCreate('uint;uint;uint;uint;uint;uint;uint;uint;uint')
- Select
- Case $i_Sec = Default
- $i_Sec = @SEC
- ContinueCase
- Case $i_Min = Default
- $i_Min = @MIN
- ContinueCase
- Case $i_Hour = Default
- $i_Hour = @HOUR
- ContinueCase
- Case $i_Day = Default
- $i_Day = @MDAY
- ContinueCase
- Case $i_IsDST = Default
- $i_IsDST = -1
- EndSelect
- ; The following is done because the mktime function demands
- ; that the month be in 0-11 (Jan = 0) format instead of 1-12.
- Select
- Case $i_Mon = Default
- $i_Mon = (@MON - 1)
- Case $i_Mon <> Default
- $i_Mon -= 1
- EndSelect
- ; The following is done because the mktime function expects the year in format
- ; (full year - 1900), thus 99 = 1999 and 100 = 2005. The function will try
- ; to figure out what year the user is trying to use. Thus if the function recieves
- ; 70, it's untouched, but if the user gives 1970, 1900 is subtracted automatically.
- ; Any year above 99 has 1900 automatically subtracted.
- Select
- Case $i_Year = Default
- $i_Year = (@YEAR - 1900)
- Case $i_Year < 70
- $i_Year += 100
- Case $i_Year > 99
- $i_Year -= 1900
- EndSelect
- DllStructSetData($struct_Time, 1, $i_Sec)
- DllStructSetData($struct_Time, 2, $i_Min)
- DllStructSetData($struct_Time, 3, $i_Hour)
- DllStructSetData($struct_Time, 4, $i_Day)
- DllStructSetData($struct_Time, 5, $i_Mon)
- DllStructSetData($struct_Time, 6, $i_Year)
- DllStructSetData($struct_Time, 9, $i_IsDST)
- $ptr_Time = DllStructGetPtr($struct_Time)
- $av_Time = DllCall('CrtDll.dll', 'long:cdecl', 'mktime', 'ptr', $ptr_Time)
- If @error Then
- SetError(99)
- Return False
- EndIf
- Return $av_Time[0]
- EndFunc
- ;===============================================================================
- ;
- ; Description: _StringFormatTime - Get a string representation of a timestamp
- ; according to the format string given to the function.
- ; Syntax: _StringFormatTime( "format" [, timestamp [, max length ]] )
- ; Parameter(s): Format String - A format string to convert the timestamp to.
- ; See notes for some of the values that can be
- ; used in this string.
- ; Timestamp - A timestamp to format, possibly returned from
- ; _TimeMakeStamp. If left empty, default, or less
- ; than 0, the current time is used. (default is -1)
- ; Max Length - Maximum length of the string to be returned.
- ; Default is 255.
- ; Return Value(s): On Success - Returns string formatted timestamp.
- ; On Failure - Returns False, sets @error = 99
- ; Requirement(s): _TimeGetStamp
- ; Notes: The date/time specifiers for the Format String:
- ; %a - Abbreviated weekday name (Fri)
- ; %A - Full weekday name (Friday)
- ; %b - Abbreviated month name (Jul)
- ; %B - Full month name (July)
- ; %c - Date and time representation (MM/DD/YY hh:mm:ss)
- ; %d - Day of the month (01-31)
- ; %H - Hour in 24hr format (00-23)
- ; %I - Hour in 12hr format (01-12)
- ; %j - Day of the year (001-366)
- ; %m - Month number (01-12)
- ; %M - Minute (00-59)
- ; %p - Ante meridiem or Post Meridiem (AM / PM)
- ; %S - Second (00-59)
- ; %U - Week of the year, with Sunday as the first day of the week (00 - 53)
- ; %w - Day of the week as a number (0-6; Sunday = 0)
- ; %W - Week of the year, with Monday as the first day of the week (00 - 53)
- ; %x - Date representation (MM/DD/YY)
- ; %X - Time representation (hh:mm:ss)
- ; %y - 2 digit year (99)
- ; %Y - 4 digit year (1999)
- ; %z, %Z - Either the time-zone name or time zone abbreviation, depending on registry settings; no characters if time zone is unknown
- ; %% - Literal percent character
- ; The # character can be used as a flag to specify extra settings:
- ; %#c - Long date and time representation appropriate for current locale. (ex: "Tuesday, March 14, 1995, 12:41:29")
- ; %#x - Long date representation, appropriate to current locale. (ex: "Tuesday, March 14, 1995")
- ; %#d, %#H, %#I, %#j, %#m, %#M, %#S, %#U, %#w, %#W, %#y, %#Y - Remove leading zeros (if any).
- ;
- ; User CallTip: _StringFormatTime($s_Format, $i_Timestamp = -1, $i_MaxLen = 255) - Get a string representation of a timestamp according to the format string given to the function. (required: <_UnixTime.au3>)
- ; Author(s): Rob Saunders (admin@therks.com)
- ;
- ;===============================================================================
- Func _StringFormatTime($s_Format, $i_Timestamp = -1, $i_MaxLen = 255)
- Local $struct_Time, $ptr_Time, $av_Time, $av_StrfTime
- If $i_Timestamp = default OR $i_Timestamp < 0 Then
- $i_Timestamp = _TimeGetStamp()
- EndIf
- $ptr_Time = DllCall('CrtDll.dll', 'ptr:cdecl', 'localtime', 'long*', $i_Timestamp)
- If @error Then
- SetError(99)
- Return False
- EndIf
- $av_StrfTime = DllCall('CrtDll.dll', 'int:cdecl', 'strftime', _
- 'str', '', _
- 'int', $i_MaxLen, _
- 'str', $s_Format, _
- 'ptr', $ptr_Time[0])
- Return $av_StrfTime[1]
- EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement