2010-03-25 6 views

risposta

5

Usa IsDate (stringDate) in combinazione con CDate (stringDate).

Utilizzare la funzione IsDate() per determinare se la data può essere convertita in data o ora.

CDate() riconosce i valori letterali di data e ora e alcuni numeri che rientrano nell'intervallo di date accettabili. Quando si converte un numero in una data, l'intera parte del numero viene convertita in una data. Qualsiasi parte frazionaria del numero viene convertita in un'ora del giorno, a partire da mezzanotte.

CDate riconosce i formati della data in base alle impostazioni locali del sistema. L'ordine corretto di giorno, mese e anno non può essere determinato se viene fornito in un formato diverso da una delle impostazioni di data riconosciute. Inoltre, un formato di data lunga non viene riconosciuto se contiene anche la stringa del giorno della settimana.

L'esempio seguente utilizza la funzione CDate per convertire una stringa in una data.

MyDate = "October 19, 1962" ' Define date. 
MyShortDate = CDate(MyDate) ' Convert to Date data type. 
MyTime = "4:35:47 PM"   ' Define time. 
MyShortTime = CDate(MyTime) ' Convert to Date data type. 
3
IsDate("pony") ' Returns false 
2

Credo che la sfida sia rendere la soluzione indipendente dalle impostazioni locali locali, che è una pre-richiesta in molte situazioni.

L'unico modo che ho trovato è utilizzare DateSerial() poiché ParseExact() non esiste in vbs.

Penso che il codice seguente faccia il trucco. Ci dovrebbe essere un modo più agevole per aggiungere il componente orario ma non l'ho trovato. Ovviamente questo codice esatto copre solo un formato di input, ma questo è tutto ciò di cui ho bisogno per ora.

fixedDate = fixmydate("27-01-2016 18:00:00") 


Function fixmydate(mydate) 
    sday = cint(Mid(mydate,1,2)) 
    smonth = cint(Mid(mydate,4,2)) 
    syear = cint(Mid(mydate,7,4)) 

    shour = cint(Mid(mydate,12,2)) 
    sminute = cint(Mid(mydate,15,2)) 
    ssecond = cint(Mid(mydate,18,2)) 

    sdate = DateSerial(syear,smonth,sday) 
    sdate = dateadd("h",shour,sdate) 
    sdate = dateadd("n",sminute,sdate) 
    sdate = dateadd("s",ssecond,sdate) 


    fixmydate = sdate 

End Function