ing Skrevet 18. april 2006 Del Skrevet 18. april 2006 (endret) Jeg holder på med et prosjekt der jeg skal hente ut registrerings datoer fra databasen, og sjekke om disse er før 1 november dette året. Før jeg legger inn dato i databasen er det datoene av typen dato objekt, men i databasen er det lagt som en tekst, siden det blir feil format dersom feltet er satt som dato. Når jeg henter ut datoen fra databasen blir det hentet ut som et string object, men for å få sammenlignet datoene, må jeg konvertere dette til et dato objekt. For å gjøre dette har jeg brukt denne koden: Dim m As Medlem Dim dato As New Date Dim d As String 'går gjennom alle datoer i listen While liste.Count > i m = liste.Item(i) d = m.innmeldtDato dato = Date.ParseExact(d, "d/M/yyyy", Nothing) If dato > grense Then 'dersom dato er etter 1 november dette år, blir de fjernet fra listen. liste.RemoveAt(i) Else i = i + 1 End If end while når jeg gjør dette får jeg en feilmelding: System.FormatException: String was not recognized as a valid DateTime. denne bugger på den linjen der jeg konverterer ( date.parse...) når jeg i stedenfor å sette d = m.innmeldtDato, setter d = "11/2/2006" får jeg ikke feilmelding. Jeg har sjekket formatet på datoen i databasen og alt jeg henter ut er i samme format som dette : "11/2/2006" jeg har til og med testet ut med å sette datoene i databasen til denne datoen, men selv om det er akkurat samme verdiene så liker den ikke når jeg bruker den fra databasen. Noen som har peiling på hva som kan være gale? (jeg bruker .net 2.0 og visual studio 2005) Endret 19. april 2006 av ing Lenke til kommentar
Bachelor Skrevet 18. april 2006 Del Skrevet 18. april 2006 (endret) men i databasen er det lagt som en tekst, siden det blir feil format dersom feltet er satt som dato. Hva mener du med at det blir feil format?? Er det access database du bruker? Endret 18. april 2006 av Bachelor Lenke til kommentar
wolf5 Skrevet 18. april 2006 Del Skrevet 18. april 2006 Datoformat som skrives slik: 01/01/2005 mener jeg er et engelsk format. dvs MM/dd/yyyy (måned først, så dag, så år) På norsk skriver vi dd.MM.yyyy Kan det være derfor du får feilmelding? tall over 12 som måned vil ihvertfall feile. Ellers bør du ta en nøye titt på dataene du får tilbake. Bruk breakpoints og sammenlikne en variabel med din manuelle test verdi og den verdien som kommer fra DB. Lenke til kommentar
ing Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 Er det access database du bruker? 5945865[/snapback] Jeg bruker MySQL database Lenke til kommentar
ing Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 (endret) Datoformat som skrives slik:01/01/2005 mener jeg er et engelsk format. dvs MM/dd/yyyy (måned først, så dag, så år) På norsk skriver vi dd.MM.yyyy Kan det være derfor du får feilmelding? tall over 12 som måned vil ihvertfall feile. Ellers bør du ta en nøye titt på dataene du får tilbake. Bruk breakpoints og sammenlikne en variabel med din manuelle test verdi og den verdien som kommer fra DB. 5946000[/snapback] Jeg har lagt inn datoer slik at det ikke skal ha noe å si om det er engelsk eller norsk dato. jeg bruker datoen "11/2/2006" og den skulle vel funke både på engelsk format og norsk? Jeg testet likevel med å forandre på formatstringen ("d/M/yyyy" til "M/d/yyyy"), men dette gjorde ingen forskjell. Det som er merkeli er at koden funker når jeg hardkoder stringen jeg sender inn til denne datoen, men når jeg henter ut samme datoen fra databasen så funker det ikke. Får også forskjellige feilmeldinger avhengig av om jeg kjører lokalt eller på serveren. lokal feilmelding:String was not recognized as a valid DateTime. server feilmelding: System.FormatException: The DateTime represented by the string is not supported in calendar System.Globalization.GregorianCalendar. har ikke så mye erfaring med dette så vet ikke helt hvor jeg skal begynne å lete etter feil. Jeg har brukt breakpoints og sjekket at den datoen som jeg henter ut fra databasen faktisk er helt identisk med den jeg hardkoder inn. Endret 19. april 2006 av ing Lenke til kommentar
j000rn Skrevet 19. april 2006 Del Skrevet 19. april 2006 Hvis du henter ut fra databasen kan du prøve denne: dim DBDato as System.Data.SqlTypes.SqlDateTime = CType(fradatabasedato, System.Data.SqlTypes.SqlDateTime) dim MinDato as DateTime = DBDato.Value Er ikke sikker på om den virker med OleDB, men er vel verdt et forsøk Lenke til kommentar
wolf5 Skrevet 19. april 2006 Del Skrevet 19. april 2006 Noe er tydeligvis forskjellig. Det var derfor jeg sa du skulle studere variablene nøye med Watch. Kanskje en space for mye? Prøv: Dim d as String d = m.innmeldtDato.ToString() ' For sikkerhetskyld kjør ToString() d = d.Trim(); ' Trim den for evt fjerne ekstra spaces Debug.WriteLine(">" & d & "<"); 'bare for å se dato = Date.ParseExact(d, "d/M/yyyy", Nothing) Har du prøvd bare enkel DateTime.Parse(d) ? Lenke til kommentar
ing Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 Er ikke sikker på om den virker med OleDB, men er vel verdt et forsøk 5947861[/snapback] bruker Odbc =) Lenke til kommentar
ing Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 prøvde de to siste forslagene deres, men dette ser ikke ut til å funke. Kanskje jeg skulle ha prøvd å sette datoformat i databasen? ser der er flere typer å velge mellom (date, datetime, timestamp, time). Hvilke av disse burde jeg bruke for å få ønsket format? Lenke til kommentar
ing Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 glømte å prøve date.parse, og dette funket det som er problemet nå er at datoen blir norsk, mens den jeg sammenligner med er engelsk. Hvordan skifter jeg til norsk format når jeg lager et date object? Lenke til kommentar
wolf5 Skrevet 19. april 2006 Del Skrevet 19. april 2006 Siden jeg begynte med C# har jeg kun forholdt meg til DateTime objekt. Mulig VB.NET har en bakoverkompabil Date objekt, men vet lite om den. Så lenge du konverterer begge de datoene du skal sjekke til Date/DateTime så skal sjekken fungere fint. Date/DateTime er verken norsk/engelsk, kun en dato. Dim dato1 as Date = Date.Parse(dato1string) Dim dato2 as Date = Date.Parse(dato2string) if dato1>dato2 then ... Lenke til kommentar
ing Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 Prøvde med å konvertere både dato objektet og stringen, men de ble fortsatt forskjellige 'hente ut verdiene provider = New System.Globalization.CultureInfo("nb-NO", True) d = m.innmeldtDato.ToString() '= "11/2/2006" Dim grense As New Date(Date.Today.Year, 11, 1) '="11/1/2006" 'konvertering g = DateTime.Parse(grense, provider) '="11/1/2006" dato = DateTime.Parse(d, provider) '="2/11/2006" når de blir så forskjellige, går det ikke an å sammenligne uten å få feil resultat Lenke til kommentar
wolf5 Skrevet 19. april 2006 Del Skrevet 19. april 2006 Kjapt tips der. Når datostrenger inneholder tegnet '/' så klarer ikke .Net alltid å forstå om det er d/M/yyyy eller M/d/yyyy. Så ta datostrengen.Replace("/", ".") før du parser den. d.M.yyyy kan kun tolkes slik. Har aldri sett M.d.yyyy. Lenke til kommentar
ing Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 (endret) kan jeg da sammenligne en dato av formatet 11/2/2006 med en dato av formatet 11.2.2006 og forvente riktig resultat? Prøvde den koden du ga meg, men den vil ikke bytte ut / med . Vil gjerne at koden skal fungere med engelsk datoformat, da det er dette som blir lagt inn i databasen. Jeg får feilmelding når jeg prøver å omformatere en dato som er 10/29/2006. Dette fordi omformingskoden antar at dager er mnd og omvendt. Noen som vet om det går an å sette hvordan datoen skal vises noen steder? Endret 19. april 2006 av ing Lenke til kommentar
ing Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 joda, jeg kan jo alltids sette provideren til engelsk format er ikke alltid like lett å oppdate slike feil. Men det er godt når de endelig er oppklart. Koden funker nå fint =) Tusen takk for hjelpen =) Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå