Gå til innhold

Datoformattering i VB6


Anbefalte innlegg

Jeg får inn 2 verdier i min funksjon: dato som en string og en formatmaske som en string. årsaken er at jeg aldri vet hvilken format datoen er på uten at jeg enten bygger opp masse logikk eller rett og slett ser på tilhørende formatmaske.

 

Feks:

sDate = 02012006 <- dette får jeg inn

sFormatstring = DDMMYYYY <- dette får jeg inn

 

Prøver meg da på en format.

 

Format(sDate, sFormatstring)

 

og får dette resultatet:

06097408

 

Hvorfor?

 

Jeg skal konvertere sDate til en datevariabel, men grunnet mange rare måter å sette opp datoen på så må jeg benytte meg av formatmasken som kommer med.

 

Hvis noen skjønner, så er hjelpen veldig etterlengtet :)

Lenke til kommentar
Videoannonse
Annonse

Dato-tid fungerer slik:

1 er et døgn; 24 timer. Dag null er nyttår til år 1900.

 

12 er 12. dag siden nyttår til 1900, altså 11.januar 1900.

 

02012006 er ingen dato, det er tallet 2 012 006. To millioner noen døgn etter nyttår til 1900 er 6.september 7408.

 

Hvis du vet du får dato på format ddmmyyyy så er det lett å regne om. Men det er utallige gyldige datoformater på norsk, samt ikke-datoer a la millionene du strever med. En generell, entydig måte å forstå datoinput riktig er dermed ikke mulig.

 

Edit: Ah, du får altså levert med formatmaske ja. Da går det jo an å skrive en funksjon som tolker tallene riktig. Tror du da må behandle tallene som en streng og splitte i tre strenger, og til slutt regne om til dato fra verdien av de tre strengene. Dette kan jo gå litt tregt da...

 

HTH. Beste hilsen Harald

Endret av Harald Staff
Lenke til kommentar

Så bra. Som sagt er en dato bare et tall, og når det først er det så kan du formatere som du vil; mmddyy eller ddmmyy er bare visuelle representasjoner av tallet.

 

Anbefaler å bruke dateSerial til omvandling, den er helt entydig:

Dt = DateSerial(2007, 5, 17)

gir 17 mai 07 uavhengig av formater og lokale innstillinger.

 

Beste hilsen Harald

Lenke til kommentar

Jeg vil tro følgende funksjon vil kunne gjøre nettopp dette:

Public Function ExtractDate(Text As String, Format As String) As Date

    'On Error Resume Next

 

    ' Konverter tekst til dato ved å legge formatmasken til grunn

    ExtractDate = DateSerial(Val(Mask(Text, Format, "Y", " ")), _

    Val(Mask(Text, Format, "M", " ")), Val(Mask(Text, Format, "D", " ")))

 

End Function

 

' Erstatter alle karakterer som ikke korresponderer med den gitte karakterer

Private Function Mask(Text As String, Format As String, cFind As String, cReplace As String) As String

 

    Dim Tell As Long

   

    ' Kopier inndata til returstreng

    Mask = Text

   

    For Tell = 1 To Len(Text)

        ' Sjekk denne karakteren

        If Mid(Format, Tell, 1) <> cFind Then

            Mid(Mask, Tell, 1) = cReplace

        End If

    Next

 

End Function

Lenke til kommentar
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...