Avatar billede luftballon Nybegynder
22. maj 2004 - 13:56 Der 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.
Avatar billede terry Ekspert
22. maj 2004 - 16:11 #1
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.
Avatar billede ldanielsen Nybegynder
24. maj 2004 - 09:46 #2
Jeg er helt enig med terry

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
Avatar billede ldanielsen Nybegynder
24. maj 2004 - 09:59 #3
INSERT INTO TabelNavn (dtmDato) VALUES (CONVERT(datetime, '2002/5/1', 101))

skulle være en sikker approach, se "CAST and CONVERT" i Books Online. den viste dato bliver 1. Maj.

Parameteret 101 fortæller serveren at den skal fortolke tekststrengen på amerikansk.
Avatar billede luftballon Nybegynder
24. maj 2004 - 10:20 #4
Ja problemerne består næsten altid ifm. at der byttes rundt på dag og måned.

Såvidt jeg kan forstå på jeres bud så bør man altid benytte åååå/mm/dd i sql sætningerne og så konvertere dette i brugerfladen?

Jeg benytter primært ASP/.NET
Avatar billede ldanielsen Nybegynder
24. maj 2004 - 11:22 #5
Du skal flytte problemet væk fra applikationen og ud til brugerfladen.

Hvis vi går udfra at du har den rigtige dato i databasen, vil du altid kunne vise den udfra for eksempel:
dtmDato = Rec("dtmDato")

Response.write (Right("0" & Cstr(Date(dtmDato)), 2) & "-" & Right("0" & Cstr(Month(dtmDato)), 2) & "-" Cstr(Year(dtmDato)))
Avatar billede ldanielsen Nybegynder
24. maj 2004 - 11:31 #6
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.
Avatar billede luftballon Nybegynder
24. maj 2004 - 11:35 #7
OK - det vil jeg forsøge at arbejde lidt med.

Mange tak begge to.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester