22. maj 2004 - 13:56Der er
5 kommentarer og 2 løsninger
Datoer - hvad er best practice?
Hej Jeg sidder og laver en applikation, hvor jeg ikke kan undgå at benytte datoer. I den forbindelse er jeg for 1000 gang løbet ind i problemer med dato formatet giver problemer. Skal det være dd-mm-åååå, mm-dd-åååå eller åååå-mm-dd og flytter man app'en fra en server til en anden kan man være helt sikker på at det giver problemer!!
I den forbindelse kom jeg til at tænke på hvad best practice er, når man arbejder med datoer og til en vis grad ønsker at sikrer at datoer læses rigtigt (her tænker jeg både app. og database) - også selvom man flytter den til en anden server.
Det burde være muligt at tage højde for det i sine stored procedures? Jeg har set nogle konverterer datoen til en double – er det en løsning?
Er det bedst at arbejde med danish collation, når man ønsker at få datoen ud efter DK-standarder?
Jeg er meget modtagelig for input, links til gode artikler, erfaringer og andre gode råd.
As far as I know the way that date values are stored in the dB is always the same no matter what date format you use. The problem is when you want to look at the date (format). In my oppinion I would use Danish collation and then worry aboout how you want to dsiplay the date in your client application. I would say that all programming languages can format the date as you want to, so that should be no problam. Then us yyyy-mm-dd format when querying the database and you can go wrong.
Der er ingen problemer med SQL-Serveren, men masser af problemer med brugerfladen. Så hvis du vil fortælle hvilken brugerflade derskal laves kan vi muligvis give nogle anvisninger. Er det ASP, så har jeg i hvert fald nogle gode bud.
Du skal være opmærksom på INSERT og UPDATE. Hvis du inserter sådan:
INSERT INTO TabelNavn (dtmDato) VALUES ('1-5-2002')
så kan det godt give problemer, afhængig af forholdene kan det være 1. maj eller 5. januar
Hvis du vil tilføje en dato til databasen har jeg to medtoder; SQL eller ADO. I begge tilfælde skal du angive Dato, Måned og År, og hvordan de fremkommer vil afhænge af situationen. Lader du brugeren indtasste en dato er du naturligvis nødt til at validere inputtet inden du bruger det.
Men derefter er det enkelt nok og 100% sikkert, uanset om det foregår i Mongoliet:
SQL, i uddrag (iDate, iMonth og iYear er brugerens korrekte input):
objCommand.CommandText = "UPDATE TabelNavn SET dtmDato = (CONVERT(datetime, '" & Cstr(iYear) & "/" & Cstr(iMonth ) & "/" & Cstr(iDate) & "', 101)) WHERE ID = 45" objCommand.Execute
eller i ADO: objCommand.CommandText = "SELECT dtmDato FROM TabelNavn WHERE ID = 45" objRS.Open objCommand, , 3, 3 objRS("dtmDato") = DateSerial(iYear, iMonth, iDate) objRS.Update
Brug DateSerial i stedet for Cdate, for sidstnævnte skal have en tekststreng, og er derfor også afhængig af serverens indstillinger.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.