Avatar billede wedia Nybegynder
11. februar 2009 - 12:26 Der er 9 kommentarer og
1 løsning

problem med datetime

Hej Eksperter,

Jeg har en is sætning hvor jeg ønsker at tjekke om det nuværende tidspunkt befinder sig mellem et start tidspunkt og et slut tidspunkt.
Mine DateTime's har alle formatet (dd/mm/yyyy hh:MM:ss) 
Er der nogle der kan se hvorfor dette ikke virker, og hvordan det skal se ud, på forhånd tak

DateTime dateNow = DateTime.Now;
              DateTime start = DateTime.Parse(reader["start_date"].ToString());
              DateTime end = DateTime.Parse(reader["start_end"].ToString());
              if (start < dateNow < end)
              {}else{}

jeg får denne fejl :

Operator '<' cannot be applied to operands of type 'bool' and 'System.DateTime

men hvis man ikke kan bruge '<' hvordan gør man det så !!
Avatar billede keysersoze Guru
11. februar 2009 - 12:49 #1
det er din if den er galt med - din første request, altså "start < dateNow", returnerer en boolean og den første du så at sammenligne med en datetime i med din "< end".

Uden at vide præcis hvad du vil kunne et forslag være følgende;

if (start < dateNow && dateNow < end)
Avatar billede arne_v Ekspert
11. februar 2009 - 18:02 #2
keysersozes forslag boer fjerne fejlen

derudover boer:

DateTime.Parse(reader["start_date"].ToString())

kunne laves som:

(DateTime)reader["start_date"]
Avatar billede wedia Nybegynder
11. februar 2009 - 18:59 #3
det var bare de to && jeg havde glemt nu virker det perfect så smid et svar!!
Avatar billede keysersoze Guru
11. februar 2009 - 19:26 #4
svar :)
Avatar billede moulde Nybegynder
13. februar 2009 - 18:31 #5
Du skulle måske overveje at bruge TryParse istedet for Parse, når du ikke try catcher..

For hvis værdien du henter fra databasen ikke kan laves til en datetime, så får du en kedelig fejl.

Og jeg går ud fra det er en string du henter fra databasen?
Hvis ja, så kan man da ikke caste direkte, som arne_v skriver?
Hvis nej, så er det jo som arne_v siger unødvendigt at lave datetimen om til en datetime..
Avatar billede arne_v Ekspert
13. februar 2009 - 18:40 #6
Hvis feltet er en VARCHAR, saa er man noed til at Parse.

Men saa ville jeg caste til string og saa parse den.

Jeg antog at feltet var en DATETIME.

Jeg har desvaerre set ToString anvendt lidt for ofte i den sammenhaeng.
Avatar billede moulde Nybegynder
13. februar 2009 - 18:53 #7
Ah, ja, men hvis han ikke bruger try catch når han prøver at parse, så risikerer han jo at få en fed fejl.

Derfor jeg synes han skal bruge TryParse istedet.
Avatar billede arne_v Ekspert
14. februar 2009 - 02:28 #8
Hvis man kan gøre noget fornuftigt det pågældende sted hvis TryParse returnerer false, så er det absolut en god ide.

Men hvad gør man hvis en VARCHAR i databasen som skulle indholde en dato og tid indeholder noget helt andet ?
Avatar billede moulde Nybegynder
14. februar 2009 - 12:45 #9
Ja det er så lige det.

Nok smartere at være 100% sikker på at forkerte værdier aldrig kommer ind i databasen.

Men igen, jeg vil hellere have en false tilbage, end en fejl.
Hvor meget man så kan og vil bruge false til er lige det.
Avatar billede arne_v Ekspert
15. februar 2009 - 01:48 #10
I mange tilfælde vil man ikke kunne bruge den til andet end at smide en exception.
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
Kurser inden for grundlæggende programmering

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