Автор Тема: Преобразование даты в текстовый формат  (Прочитано 2066 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sverx [?]

  • Новичок
  • *
  • Сообщений: 5
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.10.2
Подскажите как получить из даты формата 21.12.2015
- Дату формата 21 декабря 2015 г.
Гуглил, искал по форуму и в справке, но простой функции так и не нашел =(...
UPD: Сделал костыль :laugh: :blink:, так как путного ничего не нашел (Ну я еще и новичок опыт меньше 3-х дней)...
Костыль вот в чем, - эта дата берется из Gui точнее из:
Код: AutoIt [Выделить]
$q[0] = GUICtrlCreateDate ( "", 200, 20, 100, 20, $WS_TABSTOP)


Я подставил его на вход другой такой функции,предварительно конвертировав, а после сделал удаление для того, что бы оно не маячило глаза и ни как не мешало:
Код: AutoIt [Выделить]
$DATA=StringRegExpReplace(GUICtrlRead($q[0]),'(\d{2}).(\d{2}).(\d{4})','$3/$2/$1')
$q[1] = GUICtrlCreateDate ( $DATA, 200, 20, 100, 20)
$Dateprop = GUICtrlRead($q[1])
GUICtrlDelete($q[1])
 


Почему так?:
Дело в том что мне надо, что бы выбирать дату надо было один раз, а даты нужны в двух форматах ...
Но если есть варианты более простые был бы рад услышать   :beer:
« Последнее редактирование: Декабрь 20, 2015, 01:36:10 от Sverx »

Русское сообщество AutoIt

Преобразование даты в текстовый формат
« Отправлен: Декабрь 19, 2015, 23:33:30 »

Помечен как лучший ответ пользователем Sverx Отправлен Декабрь 21, 2015, 17:58:09

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7826
  • Репутация: 2287
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: Преобразование даты в текстовый формат
« Ответ #1, Отправлен: Декабрь 20, 2015, 01:54:29 »
Sverx  [?]
Цитировать
как получить из даты формата 21.12.2015
- Дату формата 21 декабря 2015 г.

Код: AutoIt [Выделить]
$sDate = _Date_Formate('21/12/2015', 'dd mmm~ yyyy г.', 1)
MsgBox(0, @ScriptName, $sDate)

Func _Date_Formate($sDate, $sRetFormat = -1, $iLocale = 0, $iReplaceCount = 1)
    Local $sDelims_Pattern, $sDay_Pattern, $sMonth_Pattern, $sYear_Pattern, $sSearch_Pattern, $sDay, $sMonth, $sYear, $iMode
   
    $sDelims_Pattern = '[\Q /\.,\E]+'
    $sDay_Pattern = '(\d{1,2})'
    $sMonth_Pattern = '(\d{1,2}|[январьфелмтпйиюгусбокд]{3,8}|[decmbrnovtspaugjlyihf]{3,9})'
    $sYear_Pattern = '(\d{4})\h?(?:г\.)?'
   
    $sSearch_Pattern = '(?i)' & $sDay_Pattern & $sDelims_Pattern & $sMonth_Pattern & $sDelims_Pattern & $sYear_Pattern
   
    Switch $sRetFormat
        Case -1, Default
            Return StringRegExp($sDate, $sSearch_Pattern, 3)
        Case Else
            $sDay = StringRegExpReplace($sDate, $sSearch_Pattern, '\1')
            $sMonth = StringRegExpReplace($sDate, $sSearch_Pattern, '\2')
            $sYear = StringRegExpReplace($sDate, $sSearch_Pattern, '\3')
           
            If StringIsDigit($sMonth) And Not StringRegExp($sRetFormat, '(?i)[^m]mm?[^m]') Then
                $iMode = 0
               
                If StringInStr($sRetFormat, 'mmm~') Then ;Needs to be expanded - for our reach russian language :)
                    $iMode = 1
                EndIf
               
                $sMonth = _DateMonthIntToStr($sMonth, $iLocale, $iMode)
            ElseIf Not StringInStr($sRetFormat, 'mmm') Then
                $sMonth = _DateMonthStrToInt($sMonth)
            EndIf
           
            $sRet = StringReplace($sRetFormat, 'dd', StringFormat('%.2i', $sDay), $iReplaceCount)
           
            If @extended = 0 Then
                $sRet = StringReplace($sRet, 'd', StringFormat('%.1i', $sDay), $iReplaceCount)
            EndIf
           
            $sRet = StringRegExpReplace($sRet, '(?i)mmm~?', $sMonth, $iReplaceCount)
           
            If @extended = 0 Then
                $sRet = StringReplace($sRet, 'mm', StringFormat('%.2i', $sMonth), $iReplaceCount)
               
                If @extended = 0 Then
                    $sRet = StringReplace($sRet, 'm', StringFormat('%.1i', $sMonth), $iReplaceCount)
                EndIf
            EndIf
           
            $sRet = StringReplace($sRet, 'yyyy', $sYear, $iReplaceCount)
           
            If @extended = 0 Then
                $sRet = StringReplace($sRet, 'yy', StringRight($sYear, 2), $iReplaceCount)
            EndIf
           
            Return $sRet
    EndSwitch
   
    Return SetError(1, 0, $sDate)
EndFunc

Func _DateMonthIntToStr($iMonth, $iLocale = 0, $iRetMode = 0)
    Local $aMonthNumber_En[13] = ["", "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"]
    Local $aMonthNumber_Ru[13] = ["", "январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь"]
    Local $aMonthNumber_Ru_Mod[13] = ["", "января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"]
   
    If Not StringIsInt($iMonth) Or $iMonth < 1 Or $iMonth > 12 Then
        Return SetError(1, 0, $iMonth)
    EndIf
   
    Switch $iLocale
        Case 1
            If $iRetMode = 1 Then
                Return StringUpper(StringLeft($aMonthNumber_Ru_Mod[$iMonth], 1)) & StringMid($aMonthNumber_Ru_Mod[$iMonth], 2)
            Else
                Return StringUpper(StringLeft($aMonthNumber_Ru[$iMonth], 1)) & StringMid($aMonthNumber_Ru[$iMonth], 2)
            EndIf
        Case Else
            Return StringUpper(StringLeft($aMonthNumber_En[$iMonth], 1)) & StringMid($aMonthNumber_En[$iMonth], 2)
    EndSwitch
EndFunc

Func _DateMonthStrToInt($sMonth)
    Local $aMonths_En = StringSplit('january|february|march|april|may|june|july|august|september|october|november|december', '|')
    Local $aMonths_En_Shrt = StringSplit('jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec', '|')
   
    For $i = 1 To $aMonths_En[0]
        If $sMonth = $aMonths_En[$i] Then
            Return StringFormat('%.2i', $i)
        EndIf
    Next
   
    For $i = 1 To $aMonths_En_Shrt[0]
        If $sMonth = $aMonths_En_Shrt[$i] Then
            Return StringFormat('%.2i', $i)
        EndIf
    Next
   
    Local $aMonths_Ru = StringSplit('январь|февраль|март|апрель|май|июнь|июль|август|сентябрь|октябрь|ноябрь|декабрь', '|')
    Local $aMonths_Ru_Shrt = StringSplit('янв|февр|март|апр|май|июнь|июль|авг.|сент|окт|нояб|дек', '|')
    Local $aMonths_Ru_Mod = StringSplit('января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря', '|')
   
    For $i = 1 To $aMonths_Ru[0]
        If $sMonth = $aMonths_Ru[$i] Then
            Return StringFormat('%.2i', $i)
        EndIf
    Next
   
    For $i = 1 To $aMonths_Ru_Shrt[0]
        If $sMonth = $aMonths_Ru_Shrt[$i] Then
            Return StringFormat('%.2i', $i)
        EndIf
    Next
   
    For $i = 1 To $aMonths_Ru_Mod[0]
        If $sMonth = $aMonths_Ru_Mod[$i] Then
            Return StringFormat('%.2i', $i)
        EndIf
    Next
   
    Return SetError(1, 0, $sMonth)
EndFunc



Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн Sverx [?]

  • Новичок
  • *
  • Сообщений: 5

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: Преобразование даты в текстовый формат
« Ответ #2, Отправлен: Декабрь 20, 2015, 02:14:11 »

Код: AutoIt [Выделить]
$sDate = _Date_Formate('21/12/2015', 'dd mmm~ yyyy г.', 1)
MsgBox(0, @ScriptName, $sDate)
...
[spoiler]
Func _Date_Formate($sDate, $sRetFormat = -1, $iLocale = 0, $iReplaceCount = 1)
    Local $sDelims_Pattern, $sDay_Pattern, $sMonth_Pattern, $sYear_Pattern, $sSearch_Pattern, $sDay, $sMonth, $sYear, $iMode
   
    $sDelims_Pattern = '[\Q /\.,\E]+'
    $sDay_Pattern = '(\d{1,2})'
    $sMonth_Pattern = '(\d{1,2}|[январьфелмтпйиюгусбокд]{3,8}|[decmbrnovtspaugjlyihf]{3,9})'
    $sYear_Pattern = '(\d{4})\h?(?:г\.)?'
   
    $sSearch_Pattern = '(?i)' & $sDay_Pattern & $sDelims_Pattern & $sMonth_Pattern & $sDelims_Pattern & $sYear_Pattern
   
    Switch $sRetFormat
        Case -1, Default
            Return StringRegExp($sDate, $sSearch_Pattern, 3)
        Case Else
            $sDay = StringRegExpReplace($sDate, $sSearch_Pattern, '\1')
            $sMonth = StringRegExpReplace($sDate, $sSearch_Pattern, '\2')
            $sYear = StringRegExpReplace($sDate, $sSearch_Pattern, '\3')
           
            If StringIsDigit($sMonth) And Not StringRegExp($sRetFormat, '(?i)[^m]mm?[^m]') Then
                $iMode = 0
               
                If StringInStr($sRetFormat, 'mmm~') Then ;Needs to be expanded - for our reach russian language :)
                    $iMode = 1
                EndIf
               
                $sMonth = _DateMonthIntToStr($sMonth, $iLocale, $iMode)
            ElseIf Not StringInStr($sRetFormat, 'mmm') Then
                $sMonth = _DateMonthStrToInt($sMonth)
            EndIf
           
            $sRet = StringReplace($sRetFormat, 'dd', StringFormat('%.2i', $sDay), $iReplaceCount)
           
            If @extended = 0 Then
                $sRet = StringReplace($sRet, 'd', StringFormat('%.1i', $sDay), $iReplaceCount)
            EndIf
           
            $sRet = StringRegExpReplace($sRet, '(?i)mmm~?', $sMonth, $iReplaceCount)
           
            If @extended = 0 Then
                $sRet = StringReplace($sRet, 'mm', StringFormat('%.2i', $sMonth), $iReplaceCount)
               
                If @extended = 0 Then
                    $sRet = StringReplace($sRet, 'm', StringFormat('%.1i', $sMonth), $iReplaceCount)
                EndIf
            EndIf
           
            $sRet = StringReplace($sRet, 'yyyy', $sYear, $iReplaceCount)
           
            If @extended = 0 Then
                $sRet = StringReplace($sRet, 'yy', StringRight($sYear, 2), $iReplaceCount)
            EndIf
           
            Return $sRet
    EndSwitch
   
    Return SetError(1, 0, $sDate)
EndFunc

Func _DateMonthIntToStr($iMonth, $iLocale = 0, $iRetMode = 0)
    Local $aMonthNumber_En[13] = ["", "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"]
    Local $aMonthNumber_Ru[13] = ["", "январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь"]
    Local $aMonthNumber_Ru_Mod[13] = ["", "января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"]
   
    If Not StringIsInt($iMonth) Or $iMonth < 1 Or $iMonth > 12 Then
        Return SetError(1, 0, $iMonth)
    EndIf
   
    Switch $iLocale
        Case 1
            If $iRetMode = 1 Then
                Return StringUpper(StringLeft($aMonthNumber_Ru_Mod[$iMonth], 1)) & StringMid($aMonthNumber_Ru_Mod[$iMonth], 2)
            Else
                Return StringUpper(StringLeft($aMonthNumber_Ru[$iMonth], 1)) & StringMid($aMonthNumber_Ru[$iMonth], 2)
            EndIf
        Case Else
            Return StringUpper(StringLeft($aMonthNumber_En[$iMonth], 1)) & StringMid($aMonthNumber_En[$iMonth], 2)
    EndSwitch
EndFunc

Func _DateMonthStrToInt($sMonth)
    Local $aMonths_En = StringSplit('january|february|march|april|may|june|july|august|september|october|november|december', '|')
    Local $aMonths_En_Shrt = StringSplit('jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec', '|')
   
    For $i = 1 To $aMonths_En[0]
        If $sMonth = $aMonths_En[$i] Then
            Return StringFormat('%.2i', $i)
        EndIf
    Next
   
    For $i = 1 To $aMonths_En_Shrt[0]
        If $sMonth = $aMonths_En_Shrt[$i] Then
            Return StringFormat('%.2i', $i)
        EndIf
    Next
   
    Local $aMonths_Ru = StringSplit('январь|февраль|март|апрель|май|июнь|июль|август|сентябрь|октябрь|ноябрь|декабрь', '|')
    Local $aMonths_Ru_Shrt = StringSplit('янв|февр|март|апр|май|июнь|июль|авг.|сент|окт|нояб|дек', '|')
    Local $aMonths_Ru_Mod = StringSplit('января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря', '|')
   
    For $i = 1 To $aMonths_Ru[0]
        If $sMonth = $aMonths_Ru[$i] Then
            Return StringFormat('%.2i', $i)
        EndIf
    Next
   
    For $i = 1 To $aMonths_Ru_Shrt[0]
        If $sMonth = $aMonths_Ru_Shrt[$i] Then
            Return StringFormat('%.2i', $i)
        EndIf
    Next
   
    For $i = 1 To $aMonths_Ru_Mod[0]
        If $sMonth = $aMonths_Ru_Mod[$i] Then
            Return StringFormat('%.2i', $i)
        EndIf
    Next
   
    Return SetError(1, 0, $sMonth)
EndFunc


Я то думал тут будет какая нибудь, одна секретная функция  :), а такой функции стандартно в AutoIT похоже, что вообще нет ...
Огромное спасибо, все работает как надо  :beer:, Всего хорошего вам :)

Оффлайн ra4o [?]

  • Скриптер
  • ****
  • Сообщений: 782
  • Репутация: 136
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Преобразование даты в текстовый формат
« Ответ #3, Отправлен: Декабрь 22, 2015, 22:12:27 »
Есть функция, только возвращает названия месяцев на английском языке :
Код: AutoIt [Выделить]

Русское сообщество AutoIt

Re: Преобразование даты в текстовый формат
« Ответ #3 Отправлен: Декабрь 22, 2015, 22:12:27 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
3810 Просмотров
Последний ответ Январь 29, 2012, 22:07:58
от CreatoR
5 Ответов
3921 Просмотров
Последний ответ Апрель 20, 2012, 09:48:27
от Arei
2 Ответов
1935 Просмотров
Последний ответ Сентябрь 20, 2012, 17:55:49
от AZJIO
1 Ответов
2376 Просмотров
Последний ответ Январь 30, 2013, 11:41:07
от madmasles
6 Ответов
5143 Просмотров
Последний ответ Март 23, 2013, 11:30:48
от dimid
19 Ответов
6811 Просмотров
Последний ответ Март 06, 2014, 13:40:36
от firex
0 Ответов
1155 Просмотров
Последний ответ Январь 20, 2014, 16:22:08
от madmasles
2 Ответов
917 Просмотров
Последний ответ Август 23, 2015, 16:10:12
от firex
1 Ответов
1250 Просмотров
Последний ответ Октябрь 21, 2015, 10:03:23
от madmasles
17 Ответов
454 Просмотров
Последний ответ Апрель 18, 2018, 12:14:22
от gunter123