- Сообщения
- 7,790
- Репутация
- 2,322
AutoIt: 3.3.6.1+
Версия: 1.0
Категория: Дата, время.
Описание: Получение названий дней недели и месяцев из локальных установок текущего пользователя всех (строкой или массивом) или по номеру.
Код/Пример:
Источник: autoit-script.ru
Автор: madmasles
Версия: 1.0
Категория: Дата, время.
Описание: Получение названий дней недели и месяцев из локальных установок текущего пользователя всех (строкой или массивом) или по номеру.
Код/Пример:
Код:
#include <Array.au3>
Opt('MustDeclareVars', 1)
Global $aWeek, $sWeek
$aWeek = _DateDayOfWeekLocalAll(False, True)
_ArrayDisplay($aWeek, '_DateDayOfWeekLocalAll(False, True)')
$aWeek = _DateDayOfWeekLocalAll(True, True)
_ArrayDisplay($aWeek, '_DateDayOfWeekLocalAll(True, True)')
$sWeek = _DateDayOfWeekLocalAll()
ConsoleWrite($sWeek & @LF)
ConsoleWrite('---' & @LF)
$sWeek = _DateDayOfWeekLocalAll(True, False, ' --> ')
ConsoleWrite($sWeek & @LF)
ConsoleWrite('---' & @LF)
For $i = 1 To 8
$sWeek = _DateDayOfWeekLocal($i)
If @error Then $sWeek = 'error ' & @error
ConsoleWrite(StringFormat('number: %02d\tname: %s', $i, $sWeek) & @LF)
Next
ConsoleWrite('---' & @LF)
For $i = 1 To 8
$sWeek = _DateDayOfWeekLocal($i, True)
If @error Then $sWeek = 'error ' & @error
ConsoleWrite(StringFormat('number: %02d\tname: %s', $i, $sWeek) & @LF)
Next
; #FUNCTION# ====================================================================================================
; Name...........: _DateDayOfWeekLocal
; Description....: Возвращает название дня недели, соответствующее указанному номеру дня (1-7) из локальных установок текущего пользователя.
; Syntax.........: _DateDayOfWeekLocal($i_NumDay, $f_Short)
; Parameters.....: $i_NumDay - номер дня недели от 1 до 7.
; $f_Short - False (или 0) - полное название дня недели, True (или <> 0) - сокращенное.
; По умолчанию - False.
; Return values..: Success - полное или сокращенное название дня недели.
; Failure - пустая сторока и флаг @error:
; -1 - целая часть номера дня недели меньше 1 или больше 7;
; 1 - ошибка DllCall().
; Author.........: madmasles
; Remarks........: Первый день недели берется из локальных установок текущего пользователя (например, для русского языка это понедельник,
; а для английского - воскресенье).
; Link...........: http://autoit-script.ru/index.php/
; Example........: Есть.
; ===============================================================================================================
Func _DateDayOfWeekLocal($i_NumDay, $f_Short = False)
Local $a_Const[2] = [0x100C, 0x002A], $a_Res
$a_Res = DllCall('kernel32.dll', 'int', 'GetLocaleInfoW', 'ulong', 0x0400, 'dword', $a_Const[0], 'wstr', '', 'int', 2)
If @error Or Not $a_Res[0] Then Return SetError(1, 0, '')
$a_Const[0] = $a_Res[3]
If $f_Short Then $a_Const[1] += 7
$i_NumDay = Int($i_NumDay)
Switch $i_NumDay
Case 1 To 7
$i_NumDay += $a_Const[0] - 1
If $i_NumDay > 6 Then $i_NumDay -= 7
$a_Res = DllCall('kernel32.dll', 'int', 'GetLocaleInfoW', 'ulong', 0x0400, 'dword', $a_Const[1] + $i_NumDay, 'wstr', '', 'int', 80)
If @error Or Not $a_Res[0] Then Return SetError(1, 0, '')
Return $a_Res[3]
EndSwitch
Return SetError(-1, 0, '')
EndFunc ;==>_DateDayOfWeekLocal
; #FUNCTION# ====================================================================================================
; Name...........: _DateDayOfWeekLocalAll
; Description....: Возвращает массив или строку с названиями всех дней недели из локальных установок текущего пользователя.
; Syntax.........: _DateDayOfWeekLocalAll($f_Short, $f_Array, $s_Delim)
; Parameters.....: $f_Short - False (или 0) - полные названия дней недели, True (или <> 0) - сокращенные. По умолчанию - False.
; $f_Array - False (или 0) - возвращается строка, True (или <> 0) - массив. По умолчанию - False.
; $s_Delim - разделитель (один или несколько символов). По умолчанию - '|'.
; Return values..: Success - строку или одномерный массив из 7 элементов с названиями всех дней недели.
; Failure - пустая сторока и флаг @error:
; 1 - ошибка DllCall().
; Author.........: madmasles
; Remarks........: Первый день недели берется из локальных установок текущего пользователя (например, для русского языка это понедельник,
; а для английского - воскресенье).
; Link...........: http://autoit-script.ru/index.php/
; Example........: Есть
; ===============================================================================================================
Func _DateDayOfWeekLocalAll($f_Short = False, $f_Array = False, $s_Delim = '|')
Local $a_Const[2] = [0x100C, 0x002A], $a_Res, $v_Ret
$a_Res = DllCall('kernel32.dll', 'int', 'GetLocaleInfoW', 'ulong', 0x0400, 'dword', $a_Const[0], 'wstr', '', 'int', 2)
If @error Or Not $a_Res[0] Then Return SetError(1, 0, '')
$a_Const[0] = $a_Res[3]
If $f_Short Then $a_Const[1] += 7
If Not $s_Delim Then $s_Delim = '|'
For $i = 0 To 6
$a_Res = DllCall('kernel32.dll', 'int', 'GetLocaleInfoW', 'ulong', 0x0400, 'dword', $a_Const[1] + $a_Const[0], 'wstr', '', 'int', 80)
If @error Or Not $a_Res[0] Then Return SetError(1, 0, '')
$v_Ret &= $a_Res[3] & $s_Delim
$a_Const[0] += 1
If $a_Const[0] = 7 Then $a_Const[0] = 0
Next
$v_Ret = StringTrimRight($v_Ret, StringLen($s_Delim))
If $f_Array Then $v_Ret = StringSplit($v_Ret, $s_Delim, 3)
Return $v_Ret
EndFunc ;==>_DateDayOfWeekLocalAll
Код:
#include <Array.au3>
Opt('MustDeclareVars', 1)
Global $aMonth, $sMonth
$aMonth = _DateDayOfMonthLocalAll(False, True)
_ArrayDisplay($aMonth, '_DateDayOfMonthLocalAll(False, True)')
$aMonth = _DateDayOfMonthLocalAll(True, True)
_ArrayDisplay($aMonth, '_DateDayOfMonthLocalAll(True, True)')
$sMonth = _DateDayOfMonthLocalAll()
ConsoleWrite($sMonth & @LF)
ConsoleWrite('---' & @LF)
$sMonth = _DateDayOfMonthLocalAll(True, False, ' --> ')
ConsoleWrite($sMonth & @LF)
ConsoleWrite('---' & @LF)
For $i = 0 To 13
$sMonth = _DateDayOfMonthLocal($i)
If @error Then $sMonth = 'error ' & @error
ConsoleWrite(StringFormat('number: %02d\tname: %s', $i, $sMonth) & @LF)
Next
ConsoleWrite('---' & @LF)
For $i = 0 To 13
$sMonth = _DateDayOfMonthLocal($i, True)
If @error Then $sMonth = 'error ' & @error
ConsoleWrite(StringFormat('number: %02d\tname: %s', $i, $sMonth) & @LF)
Next
; #FUNCTION# ====================================================================================================
; Name...........: _DateDayOfMonthLocal
; Description....: Возвращает название месяца, соответствующее указанному номеру (1-12(13)) из локальных установок текущего пользователя.
; Syntax.........: _DateDayOfMonthLocal($i_NumMonth, $f_Short)
; Parameters.....: $i_NumMonth - номер месяца от 1 до 12(13).
; $f_Short - False (или 0) - полное название месяца, True (или <> 0) - сокращенное.
; По умолчанию - False.
; Return values..: Success - полное или сокращенное название месяца.
; Failure - пустая сторока и флаг @error:
; -1 - целая часть номера месяца меньше 1 или больше 12(13);
; 1 - ошибка DllCall().
; Author.........: madmasles
; Remarks........: Тринадцатый месяц возвращается, если такой есть в локальных установках.
; http://msdn.microsoft.com/en-us/library/windows/desktop/dd373856(v=vs.85).aspx
; Link...........: http://autoit-script.ru/index.php/
; Example........: Есть.
; ===============================================================================================================
Func _DateDayOfMonthLocal($i_NumMonth, $f_Short = False)
Local $a_Const[2] = [0x0038, 0x100E], $a_Res
If $f_Short Then
$a_Const[0] += 12
$a_Const[1] += 1
EndIf
$i_NumMonth = Int($i_NumMonth)
Switch $i_NumMonth
Case 1 To 12
$a_Res = DllCall('kernel32.dll', 'int', 'GetLocaleInfoW', 'ulong', 0x0400, 'dword', $a_Const[0] + $i_NumMonth - 1, 'wstr', '', 'int', 80)
If @error Or Not $a_Res[0] Then Return SetError(1, 0, '')
Return $a_Res[3]
Case 13
$a_Res = DllCall('kernel32.dll', 'int', 'GetLocaleInfoW', 'ulong', 0x0400, 'dword', $a_Const[1], 'wstr', '', 'int', 80)
If @error Or Not $a_Res[0] Then Return SetError(1, 0, '')
If $a_Res[3] Then Return $a_Res[3]
EndSwitch
Return SetError(-1, 0, '')
EndFunc ;==>_DateDayOfMonthLocal
; #FUNCTION# ====================================================================================================
; Name...........: _DateDayOfMonthLocalAll
; Description....: Возвращает строку или массив с названиями всех месяцев из локальных установок текущего пользователя.
; Syntax.........: _DateDayOfMonthLocalAll($f_Short, $f_Array, $s_Delim)
; Parameters.....: $f_Short - False (или 0) - полные названия месяцев, True (или <> 0) - сокращенные. По умолчанию - False.
; $f_Array - False (или 0) - возвращается строка, True (или <> 0) - массив. По умолчанию - False.
; $s_Delim - разделитель (один или несколько символов). По умолчанию - '|'.
; Return values..: Success - строку с названиями всех месяцев или одномерный массив из 12(13) элементов.
; Failure - пустая сторока и флаг @error:
; 1 - ошибка DllCall().
; Author.........: madmasles
; Remarks........: Тринадцатый месяц возвращается, если такой есть в локальных установках.
; http://msdn.microsoft.com/en-us/library/windows/desktop/dd373856(v=vs.85).aspx
; Link...........: http://autoit-script.ru/index.php/
; Example........: Есть
; ===============================================================================================================
Func _DateDayOfMonthLocalAll($f_Short = False, $f_Array = False, $s_Delim = '|')
Local $a_Const[2] = [0x0038, 0x100E], $a_Res, $v_Ret
If $f_Short Then
$a_Const[0] += 12
$a_Const[1] += 1
EndIf
If Not $s_Delim Then $s_Delim = '|'
For $i = 0 To 11
$a_Res = DllCall('kernel32.dll', 'int', 'GetLocaleInfoW', 'ulong', 0x0400, 'dword', $a_Const[0] + $i, 'wstr', '', 'int', 80)
If @error Or Not $a_Res[0] Then Return SetError(1, 0, '')
$v_Ret &= $a_Res[3] & $s_Delim
Next
$a_Res = DllCall('kernel32.dll', 'int', 'GetLocaleInfoW', 'ulong', 0x0400, 'dword', $a_Const[1], 'wstr', '', 'int', 80)
If @error Or Not $a_Res[0] Then Return SetError(1, 0, '')
If $a_Res[3] Then $v_Ret &= $a_Res[3] & $s_Delim
$v_Ret = StringTrimRight($v_Ret, StringLen($s_Delim))
If $f_Array Then $v_Ret = StringSplit($v_Ret, $s_Delim, 3)
Return $v_Ret
EndFunc ;==>_DateDayOfMonthLocalAll
Источник: autoit-script.ru
Автор: madmasles