Преобразование строки в дату - VB

Узнай цену своей работы

Формулировка задачи:

Код:
Результатом преобразования Trim(CDate("09 12 2008 12:24:26"))
будет 9-е декабря. Есть ли в VB, VBA, VBS четкая установка формата даты?
P.S. Региональные настройки в ОС никак не влияют. Пробовал.

Решение задачи: «Преобразование строки в дату»

textual
Листинг программы
<font color="blue">Public</font> <font color="blue">Sub</font> Main()
    Debug.<font color="blue">Print</font> Format$(CDateEx(<font color="teal">"Sep 16 2008 18:40:07"</font>, <font color="teal">"mdy"</font>), <font color="teal">"d.m.yyyy hh:nn:ss"</font>)
    Debug.<font color="blue">Print</font> Format$(CDateEx(<font color="teal">"17 9 2008 18:40:07"</font>, <font color="teal">"dmy"</font>), <font color="teal">"d.m.yyyy hh:nn:ss"</font>)
    Debug.<font color="blue">Print</font> Format$(CDateEx(<font color="teal">"18-2008-Sep 18:40:07"</font>, <font color="teal">"dym"</font>), <font color="teal">"d.m.yyyy hh:nn:ss"</font>)
    Debug.<font color="blue">Print</font> Format$(CDateEx(<font color="teal">"2008/sep/8 18:40:07"</font>, <font color="teal">"ymd"</font>), <font color="teal">"d.m.yyyy hh:nn:ss"</font>)
<font color="blue">End</font> <font color="blue">Sub</font>
    
<font color="blue">Public</font> <font color="blue">Function</font> CDateEx(ss <font color="blue">As</font> <font color="blue">String</font>, Optional <font color="blue">ByVal</font> ymd <font color="blue">As</font> <font color="blue">String</font> = <font color="teal">"ymd"</font>) <font color="blue">As</font> <font color="blue">Date</font>
    <font color="blue">Dim</font> i <font color="blue">As</font> <font color="blue">Integer</font>, st <font color="blue">As</font> <font color="blue">String</font>, sd <font color="blue">As</font> <font color="blue">String</font>, v <font color="blue">As</font> Variant, s <font color="blue">As</font> <font color="blue">String</font>, k <font color="blue">As</font> <font color="blue">Integer</font>, _
        m <font color="blue">As</font> <font color="blue">Integer</font>, d <font color="blue">As</font> <font color="blue">Integer</font>, y <font color="blue">As</font> <font color="blue">Integer</font>, j <font color="blue">As</font> <font color="blue">Integer</font>
    
    ymd = LCase$(ymd)
    i = InStrRev(ss, <font color="teal">" "</font>)
    <font color="blue">If</font> i <font color="blue">Then</font>
        st = <font color="blue">Mid</font>$(ss, i)
        ss = Trim$(Left$(ss, i - <font color="darkblue"><b>1</b></font>))
    <font color="blue">End</font> <font color="blue">If</font>
    
    ss = Replace(ss, <font color="teal">"-"</font>, <font color="teal">" "</font>)
    ss = Replace(ss, <font color="teal">"/"</font>, <font color="teal">" "</font>)
    ss = Replace(ss, <font color="teal">"."</font>, <font color="teal">" "</font>)
    
    v = Split(ss, <font color="teal">" "</font>)
    <font color="blue">On</font> <font color="blue">Error</font> <font color="blue">GoTo</font> Err_
    <font color="blue">For</font> i = <font color="darkblue"><b>0</b></font> <font color="blue">To</font> UBound(v)
        s = v(i)
        <font color="blue">If</font> Len(s) <font color="blue">Then</font>
            k = k + <font color="darkblue"><b>1</b></font>
            <font color="blue">If</font> k = <font color="darkblue"><b>4</b></font> <font color="blue">Then</font> <font color="blue">GoTo</font> Err_
            <font color="blue">Select</font> <font color="blue">Case</font> <font color="blue">Mid</font>$(ymd, k, <font color="darkblue"><b>1</b></font>)
                <font color="blue">Case</font> <font color="teal">"d"</font>
                    <font color="blue">If</font> IsNumeric(s) <font color="blue">Then</font>
                        d = CInt(s)
                        <font color="blue">If</font> d < <font color="darkblue"><b>1</b></font> <font color="blue">Or</font> d > <font color="darkblue"><b>31</b></font> <font color="blue">Then</font> <font color="blue">GoTo</font> Err_
                    <font color="blue">End</font> <font color="blue">If</font>
                <font color="blue">Case</font> <font color="teal">"m"</font>
                    <font color="blue">If</font> IsNumeric(s) <font color="blue">Then</font>
                        m = CInt(s)
                        <font color="blue">If</font> m < <font color="darkblue"><b>1</b></font> <font color="blue">Or</font> m > <font color="darkblue"><b>12</b></font> <font color="blue">Then</font> <font color="blue">GoTo</font> Err_
                    <font color="blue">Else</font>
                        s = LCase(Left$(s, <font color="darkblue"><b>3</b></font>))
                        <font color="blue">For</font> j = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> <font color="darkblue"><b>34</b></font> <font color="blue">Step</font> <font color="darkblue"><b>3</b></font>
                            <font color="blue">If</font> s = <font color="blue">Mid</font>$(<font color="teal">"janfebmaraprmayjunjulaugsepoctnovdec"</font>, j, <font color="darkblue"><b>3</b></font>) <font color="blue">Then</font>
                                m = (j + <font color="darkblue"><b>2</b></font>) / <font color="darkblue"><b>3</b></font>: <font color="blue">Exit</font> <font color="blue">For</font>
                            <font color="blue">End</font> <font color="blue">If</font>
                        <font color="blue">Next</font> j
                    <font color="blue">End</font> <font color="blue">If</font>
                    <font color="blue">If</font> m = <font color="darkblue"><b>0</b></font> <font color="blue">Then</font> <font color="blue">GoTo</font> Err_
                <font color="blue">Case</font> <font color="teal">"y"</font>
                    <font color="blue">If</font> IsNumeric(s) <font color="blue">Then</font> y = CInt(s)
            <font color="blue">End</font> <font color="blue">Select</font>
        <font color="blue">End</font> <font color="blue">If</font>
    <font color="blue">Next</font> i
    CDateEx = CDate(Format$(DateSerial(y, m, d), <font color="teal">"yyyy-mm-dd"</font>) & <font color="teal">" "</font> & st)
    <font color="blue">Exit</font> <font color="blue">Function</font>

Err_:
    Err.Raise <font color="darkblue"><b>513</b></font>, , <font color="teal">"Строка с датой содержит ошибку"</font>
<font color="blue">End</font> <font color="blue">Function</font>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5